MacOS上的Dock存在问题。 在dock-icon的上下文菜单中有2个项目:MacOS的Standart Quit和一些我没有添加的菜单项Quit。 退出,不是我的,是可行的,并与我的方法相关联:
class TrayIcon(wx.TaskBarIcon):
def make_menu(self):
self.menu = wx.Menu()
item = self.menu.Append(wx.ID_EXIT,"Exit", "Exit from application")
self.menu.Bind(wx.EVT_MENU, self.on_menu_exit, item)
def CreatePopupMenu(self):
self.make_menu()
return self.menu
如你所见,我将它“退出”,但我看到“退出”,但它仍然按我的方法处理。
退出即系统,它将无法正常工作,当我选择它时,没有任何反应,但是应用程序的下一步操作会导致此错误消息:
文件 “/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode/wx/_core。 PY”, 第14501行,在 getattr 中wx._core.PyDeadObjectError:C ++部分 主对象已被删除,不再允许属性访问。
我做错了什么? 感谢
答案 0 :(得分:2)
原因可能是您没有引用item
。它绑定在self.menu.Bind
中,但您不在Python代码中保留引用。所以Python垃圾收集器看到这个wx.MenuItem
不再被引用(在Python代码中),所以它被删除了。调用Wx的清理代码(__del__
),并且在C ++代码中也删除了该对象,尽管它仍在使用中!。因此,当您单击菜单项时,它会尝试将单击的菜单项与(当时)删除的菜单项匹配,并抛出前面提到的PyDeadObjectError
。要解决此“错误”,只需保留对wx.MenuItem
:
self.item = self.menu.Append(...