Выяснение, какой виджет вызвал EVT_MOUSE_ENTER в wxpython - PullRequest
0 голосов
/ 20 октября 2011

Есть ли способ узнать, какой виджет вызвал событие EVT_MOUSE_ENTER или событие EVT_MOUSE_LEAVE?У меня 42 виджета, размещенных в гридсайзере 6 * 7, и я хочу, чтобы каждый из них реагировал на эти два события одинаково.К сожалению, я просмотрел документы и оказалось, что только события нажатия кнопки могут быть прослежены до их источника, используя такие вещи, как event.GetId ().Я прав насчет этого?Это сэкономит мне огромное количество кода. Если кто-то покажет, что я не прав.

Спасибо.

1 Ответ

2 голосов
/ 20 октября 2011

Я не уверен, что это то, что вы ищете, но в любом случае это работает для меня в 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...