在wx.TaskBarIcon派生类中绑定事件处理程序

1 投票
1 回答
767 浏览
提问于 2025-04-16 19:39

我正在尝试将 EVT_TASKBAR_RIGHT_UP 事件绑定到一个自定义类中的函数,这个类是从 wx.TaskBarIcon 继承来的。我使用的代码是 self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnTaskBarRight),这段代码放在类的 init 函数里。但是,当解释器遇到这段代码时,它给了我这样的错误:

Traceback (most recent call last):
File "serverindicator.py", line 145, in <module>
    tbicon = tbicon()
File "serverindicator.py", line 125, in __init__
    self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnTaskBarRight)
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 3918, in Bind
    event.Bind(self, id, id2, handler)              
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 3992, in Bind
    target.Connect(id1, id2, et, function)
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 3875, in Connect
    return _core_.EvtHandler_Connect(*args, **kwargs)
TypeError: in method 'EvtHandler_Connect', expected argument 1 of type 'wxEvtHandler *'

根据我所了解的,这个错误的意思是 wx.EVT_TASKBAR_RIGHT_UP 不是一个事件处理程序类型,我原以为它是的。这是不是和我使用的类有关呢?以下是相关的部分:

class tbicon(wx.TaskBarIcon):
    def __init__(self):
        icon = wx.Icon("red-circle.png", wx.BITMAP_TYPE_PNG)
        self.SetIcon(icon, "")
        self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.OnTaskBarRight)

    def OnTaskBarRight(self, event):
        ID_SETTINGS = wx.NewId()
        ID_EXIT = wx.NewId()
        self.rightmenu = wx.Menu(self, wx.ID_ANY)
        settingsMenuItem = rightmenu.Append(ID_SETTINGS, "Settings")
        exitMenuItem = rightmenu.Append(ID_EXIT, "Exit")
        wx.EVT_MENU(self, ID_SETTINGS, settingswindow.Show(True))
        wx.EVT_MENU(self, ID_EXIT, self.OnExitClicked)
        self.PopupMenu(self.rightmenu, event.GetPoint())
        self.rightmenu.Destroy()

    def OnExitClicked(self, event):
        serverindicator.Destroy()

谢谢!

1 个回答

2

如果你重写了一个小部件的 __init__ 方法,你需要调用一下父类的 __init__ 方法。也就是说,在你的 __init__ 方法里加上

super(tbicon, self).__init__()

撰写回答