确定哪个窗口小部件在wxpython中触发了EVT_MOUSE_ENTER

时间:2011-10-19 20:46:36

标签: wxpython mouseevent

有没有办法找出触发EVT_MOUSE_ENTER事件或EVT_MOUSE_LEAVE事件的窗口小部件?我有一个6 * 7网格化器中安排了42个小部件,我希望它们各自以同样的方式响应这两个事件。不幸的是,我查看了文档,似乎只有按钮单击事件可以使用event.GetId()之类的东西追溯到它们的源代码。我这是对的吗?它会为我节省大量的代码如果有人能证明我错了。

感谢。

1 个答案:

答案 0 :(得分:2)

我不确定这是否是您正在寻找的,但它无论如何都适用于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()来确定它是哪一个。有关更多信息,请查看本教程:http://www.blog.pythonlibrary.org/2011/09/20/wxpython-binding-multiple-widgets-to-the-same-handler/

相关问题