2011-02-04 78 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觸發時鼠標是外部的窗口。