我正在使用wxPython事件绑定来制作拖动算法。但是我遇到了一个问题,当鼠标没有直接在我的框架上时,事件不会触发。
当拖动看起来好像鼠标逃离框架时(如果用户快速移动它),这就成了一个问题,框架忽略了更新它的位置。
是否有更改绑定以便即使鼠标未在相关帧上方也会触发?
段:
self.Bind(wx.EVT_LEFT_DOWN, self.relative_mouse_position)
self.Bind(wx.EVT_LEFT_UP, self.wid_unbind)
摘录:
def relative_mouse_position (self, event):
cx, cy = wx.GetMousePosition()
x, y = self.GetPosition()
RelX = cx - x
RelY = cy - y
self.Bind(wx.EVT_MOTION, lambda event: self.wid_drag(event, RelX, RelY))
def wid_drag (self, event, RelX, RelY):
cx, cy = wx.GetMousePosition()
x = cx - RelX
y = cy - RelY
if x < 0:
x = 0
if y < 0:
y = 0
self.SetPosition((x, y))
def wid_unbind (self, event):
self.Unbind(wx.EVT_MOTION)
答案 0 :(得分:2)
当您开始拖动时,请拨打CaptureMouse
以将鼠标锁定到您正在拖动的窗口。
答案 1 :(得分:0)
未经测试但可能绑定,EVT_LEAVE_WINDOW
在鼠标位于窗口外时触发。