确定哪个小部件在wxpython中触发EVT_鼠标输入

确定哪个小部件在wxpython中触发EVT_鼠标输入,wxpython,mouseevent,Wxpython,Mouseevent,有没有办法找出哪个小部件触发了EVT_鼠标进入事件或EVT_鼠标离开事件?我在一个6*7的gridsizer中安排了42个小部件,我希望它们每个都以相同的方式响应这两个事件。不幸的是,我查看了文档,似乎只有按钮单击事件可以使用event.GetId()之类的东西追溯到它们的源代码。我说的对吗?如果有人能证明我错了,这将为我节省大量代码 谢谢 我不确定这是否是您想要的,但无论如何,它在Windows上对我都有效: import wx ###############################

有没有办法找出哪个小部件触发了EVT_鼠标进入事件或EVT_鼠标离开事件?我在一个6*7的gridsizer中安排了42个小部件,我希望它们每个都以相同的方式响应这两个事件。不幸的是,我查看了文档,似乎只有按钮单击事件可以使用event.GetId()之类的东西追溯到它们的源代码。我说的对吗?如果有人能证明我错了,这将为我节省大量代码


谢谢

我不确定这是否是您想要的,但无论如何,它在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演示并在那里观看事件,或者您可以使用小部件检查工具()在您自己的应用程序中显示事件。