我遇到了wx.EVT_LEFT_UP事件似乎错误的问题,或者至少我发现它非常违反直觉。
当我向下点击一个面板,按住按钮然后在其他面板上单击时触发一个功能,我想调用一个函数。
请考虑以下代码:
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事件仅针对之前单击的面板触发。 (见图)。
如您所见,左侧面板而不是右侧面板触发了Up事件。有人对此有解释吗?