2011-02-04 50 views
1

我正在玩wxPython事件绑定,以便制作拖动算法。不过,我遇到了一个问题,当鼠标不在我的框架上时,事件不会触发。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) 

回答

2

当您开始拖动时,请致电CaptureMouse将鼠标锁定到您正在拖动的窗口。

0

未测试,但可能结合,EVT_LEAVE_WINDOW触发时鼠标是外部的窗口。