【问题标题】:Problem with Dock on MacOS at wxPython applicationwxPython 应用程序中 MacOS 上的 Dock 问题
【发布时间】:2011-10-31 05:50:09
【问题描述】:

MacOS 上的 Dock 存在问题。 在停靠图标的上下文菜单中有 2 个项目:MacOS 的标准退出和一些菜单项退出,我没有添加。 那个退出,不是我的,是有效的,并且与我的方法相关:

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: The C++ part of Main 对象已被删除,不再允许属性访问。

我做错了什么? 谢谢

【问题讨论】:

  • 您正在使用股票 ID wx.ID_EXIT(请参阅wiki.wxpython.org/SpecialIDs),因此 wxPython 正在更改菜单项的标签。您没有显示所有代码,所以我不确定self.on_menu_exit 会发生什么。您可能希望将该方法添加到您的问题中。
  • 没什么有趣的,只是 > print "Quit clicked"
  • 问题不在这里,问题是 on_menu_exit 没有被调用!

标签: python macos wxpython wxwidgets


【解决方案1】:

原因可能是您没有保留对item 的引用。它绑定在self.menu.Bind 中,但您不会在 Python 代码中保留引用。因此,Python 垃圾收集器看到不再引用的 wx.MenuItem(在 Python 代码中),因此将其删除。 Wx 的清理代码 (__del__) 被调用,并且该对象也在 C++ 代码中被删除,尽管它仍在使用中!。因此,当您单击菜单项时,它会尝试将单击的菜单项与(到那时)已删除的菜单项进行匹配,并抛出上述PyDeadObjectError。要解决此“错误”,只需保留对 wx.MenuItem 的引用:

self.item = self.menu.Append(...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多