确定哪个小部件在wxpython中触发EVT_鼠标输入
有没有办法找出哪个小部件触发了EVT_鼠标进入事件或EVT_鼠标离开事件?我在一个6*7的gridsizer中安排了42个小部件,我希望它们每个都以相同的方式响应这两个事件。不幸的是,我查看了文档,似乎只有按钮单击事件可以使用event.GetId()之类的东西追溯到它们的源代码。我说的对吗?如果有人能证明我错了,这将为我节省大量代码确定哪个小部件在wxpython中触发EVT_鼠标输入,wxpython,mouseevent,Wxpython,Mouseevent,有没有办法找出哪个小部件触发了EVT_鼠标进入事件或EVT_鼠标离开事件?我在一个6*7的gridsizer中安排了42个小部件,我希望它们每个都以相同的方式响应这两个事件。不幸的是,我查看了文档,似乎只有按钮单击事件可以使用event.GetId()之类的东西追溯到它们的源代码。我说的对吗?如果有人能证明我错了,这将为我节省大量代码 谢谢 我不确定这是否是您想要的,但无论如何,它在Windows上对我都有效: import wx ###############################
谢谢 我不确定这是否是您想要的,但无论如何,它在Windows上对我都有效:
import wx
########################################################################
class MyForm(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
btnOne = wx.Button(panel, label="Button One", name="btnOne")
btnOne.Bind(wx.EVT_ENTER_WINDOW, self.onEnter)
btnTwo = wx.Button(panel, label="Button Two", name="btnTwo")
btnTwo.Bind(wx.EVT_ENTER_WINDOW, self.onEnter)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(btnOne, 0, wx.ALL, 5)
sizer.Add(btnTwo, 0, wx.ALL, 5)
panel.SetSizer(sizer)
#----------------------------------------------------------------------
def onEnter(self, event):
""""""
widget = event.GetEventObject()
print widget.GetName()
# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()
其思想是将小部件绑定到同一个处理程序,然后使用GetEventObject()确定哪个小部件称为所述处理程序。然后,您可以通过GetId()或GetName()使用小部件自己的内省来确定它是哪一个。有关更多信息,请查看本教程:谢谢,迈克,这确实有效。我确实理解我认为的理论,但我只是被这样一个事实抛到了脑后:我正在使用的wxPython文档和Wing text Competition提示都没有为鼠标事件提供这些选项。是的。有时您必须加载wxPython演示并在那里观看事件,或者您可以使用小部件检查工具()在您自己的应用程序中显示事件。