Как плавно перемещать элементы в wxPython?

#drag-and-drop #wxpython #wxwidgets

#перетаскивание #wxpython #wxwidgets

Вопрос:

Я пытаюсь перетащить кнопку с помощью следующего кода в wxPython, однако перетаскивание мерцает и кажется резким, и я не уверен, почему — или как это исправить. Я изучил документы wxWidgets, но, похоже, не могу выяснить, в чем проблема. Заранее спасибо!

 import wx

app = wx.App(False)
d = {}

def wMouseDown(e):
    print "!!!", e.GetEventObject()

def MouseDown(e):   
    o           = e.GetEventObject()
    sx,sy       = panel.ScreenToClient(o.GetPositionTuple())
    dx,dy       = panel.ScreenToClient(wx.GetMousePosition())
    o._x,o._y   = (sx-dx, sy-dy)
    d['d'] = o

def MouseMove(e):
    try:
        if 'd' in d:
            o = d['d']
            x, y = wx.GetMousePosition()
            o.SetPosition(wx.Point(x o._x,y o._y))
    except: pass

def MouseUp(e):
    try:
        if 'd' in d: del d['d']
    except: pass

frame = wx.Frame(None, -1, 'simple.py')
panel = wx.Panel(frame)
box = wx.BoxSizer(wx.VERTICAL)
button1 = wx.Button(panel, -1, "foo")
box.Add(button1, 0, wx.ALL, 10)
button2 = wx.Button(panel, -1, "bar")
box.Add(button2, 0, wx.ALL, 10)

button1.Bind(wx.EVT_LEFT_DOWN, MouseDown)
button2.Bind(wx.EVT_LEFT_DOWN, MouseDown)

button1.Bind(wx.EVT_MOTION, MouseMove)
button2.Bind(wx.EVT_MOTION, MouseMove)

button1.Bind(wx.EVT_LEFT_UP, MouseUp)
button2.Bind(wx.EVT_LEFT_UP, MouseUp)

panel.Bind(wx.EVT_MOTION, MouseMove)
panel.Bind(wx.EVT_LEFT_UP, MouseUp)

panel.SetSizer(box)
panel.Layout()
frame.Show()

app.MainLoop()
  

Комментарии:

1. Это плавно в Windows с wxPython 2.9

2. Полностью так? Вы не можете обнаружить никаких раздражающих эффектов?

3. Вообще ничего, и я не вижу ничего плохого в вашем подходе. Попробуйте явно вызвать panel. Обновление () после каждого перемещения, возможно, ваш базовый инструментарий gui пытается оптимизировать (минимизировать) перерисовку.

4. Спасибо, я пробовал это … но это все еще действует забавно. Кнопка слегка «колеблется» под курсором мыши при перемещении, и это сводит меня с ума!

5. @FrobbaBobba Он также плавно работает в Windows 8 pro с wxPython v3.0