2011-02-04 27 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マウスが窓の外である場合に発生させます。

関連する問題