如何在没有任何打开窗口的情况下更改 wxPython 中的 OSX 菜单栏?

gyi*_*yim 5 python macos pyobjc wxpython

我正在编写一个 wxPython 应用程序,该应用程序在关闭所有窗口后仍保持打开状态 - 因此您仍然可以将新文件拖放到 OSX 停靠栏图标上(我使用myApp.SetExitOnFrameDelete(False))。

不幸的是,如果我关闭所有窗口,OSX 菜单栏将只包含一个“帮助”菜单。我想至少添加一个文件/打开菜单项,或者只保留主窗口的菜单栏。这在 wxPython 中以某种方式可能吗?

事实上,我也会对非 wxPython hack 感到满意(例如,在 pyobjc 中设置菜单,但在 wxPython 中运行其余的 GUI)。无论如何,OSX 中的 wxPython 开发都是一种黑客攻击;)

更新:我设法使用 Lyndsey Ferguson 的提示解决了这个问题。这是我所做的:

  • 在启动时,我创建了一个窗口,并立即显示和隐藏。我将它的位置设置为(-10000,-10000)使其不会在屏幕上闪烁(啊,多么肮脏的黑客!)
  • 我在该窗口中创建了一个空的 EVT_CLOSE 事件处理程序,使其无法关闭。
  • 似乎销毁窗口会重置 OSX 菜单,但隐藏不会......所以当最后一个窗口关闭时,我需要再次显示和隐藏此窗口(隐藏是必要的,以便用户无法使用窗口菜单或 Cmd-`)

是的,这真的很丑……如果有人提出更漂亮的解决方案,我将不胜感激。

更新2:实际上它可以用更简单的方式解决:如果我们不关闭最后一个窗口,只需隐藏它。并确保它不再响应菜单事件。

Lyn*_*son 1

你能创建一个位于屏幕外某处的隐藏窗口吗?这是一个 hack,但我记得必须做很多 hack 才能使我的基于 wxPython 的应用程序在 Mac OS X 上正常工作。

注意:您必须禁用关闭按钮并设置该隐藏窗口,以便它不会显示在“窗口”菜单中。

旁白:您是否考虑过将 Python 应用程序的 GUI 部分分解出来并在 Mac OS X 上使用 PyObjC?你会得到更多本地行为......