我遇到了一個問題,其中wx.EVT_LEFT_UP事件似乎出錯了,或者至少,我覺得它非常違反直覺。wxpython:鼠標事件觸發錯誤
我想在下拉一個面板時按下按鈕,然後在上一個面板上點擊時激活一個功能。
考慮下面的代碼:
import wx
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
panel = wx.Panel(self)
# left panel
lPan = wx.Panel(panel)
lPan.SetBackgroundColour('#9C4141')
lPan.Bind(wx.EVT_LEFT_DOWN, lambda e, p='left': self.onLeftDown(e, p))
lPan.Bind(wx.EVT_LEFT_UP, lambda e, p='left': self.onLeftUp(e, p))
# right panel
rPan = wx.Panel(panel)
rPan.SetBackgroundColour('#415C9C')
rPan.Bind(wx.EVT_LEFT_DOWN, lambda e, p='right': self.onLeftDown(e, p))
rPan.Bind(wx.EVT_LEFT_UP, lambda e, p='right': self.onLeftUp(e, p))
# box sizer
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.Add(lPan, 1, flag=wx.EXPAND)
hbox.Add(rPan, 1, flag=wx.EXPAND)
panel.SetSizer(hbox)
self.Show()
def onLeftDown(self, e, panel):
print('Mouse down on {} panel'.format(panel))
def onLeftUp(self, e, panel):
print('Mouse up on {} panel'.format(panel))
if __name__ == '__main__':
app = wx.App()
Example(None, title='Down and Up click', size=(200, 150))
app.MainLoop()
這會工作例如使用JavaScript就好了,因爲綁定到事件的Element將獨立地響應Down和Up點擊。然而,在這裏,看起來,Up事件僅針對之前向下點擊的面板激發。 (見圖片)。
正如你所看到的,向上事件被觸發的左側面板,而不是在右側面板中。有沒有人對此有過解釋?
您好,在Windows上,無論在2.7/2.9的wxPython和3.6.2/4.0的wxPython您的例子可以作爲你預計(左下/右上)。您可以使用[WIT](https://wiki.wxpython.org/Widget%20Inspection%20Tool),在進入主循環之前插入雙線,瀏覽面板並激活事件查看器以查看所有事件爲兩個面板實時。 – nepix32
感謝與檢查員的提示。我用它,對我來說,在拖動之後,在右側面板上確實沒有鼠標上移事件(或其他事件,而不是運動和setcursor)。我也使用版本wxPython 4('4.0.0b1 osx-cocoa(phoenix)'),所以它似乎是一個macOS執行錯誤。 – Azial