我正在编写一个wxPython应用程序,在关闭所有窗口后仍保持打开状态 - 所以你仍然可以拖动它将新文件拖放到OSX停靠栏图标上(我使用myApp.SetExitOnFrameDelete(False)
执行此操作)。
不幸的是,如果我关闭所有窗口,OSX菜单栏将只包含一个“帮助”菜单。我想添加至少一个File / Open菜单项,或者只保留主窗口的菜单栏。这在wxPython中是否可行?
事实上,我也会对非wxPython hack感到满意(例如,在pyobjc中设置菜单,但在wxPython中运行其余的GUI)。无论如何,OSX中的wxPython开发是如此的黑客攻击;)
更新:我设法使用Lyndsey Ferguson的提示解决了这个问题。这就是我所做的:
(-10000,-10000)
,这样它就不会在屏幕上闪烁(aargh,这是多么糟糕的黑客!)是的,这真的很丑......如果有人想出更漂亮的解决方案,我将非常感激。
更新2:实际上它可以通过更简单的方式解决:如果我们关闭最后一个窗口,只有隐藏它。并确保它不再响应菜单事件。
答案 0 :(得分:1)
你可以在某处创建一个隐藏的窗口吗?这是一个黑客,但我记得不得不做很多黑客攻击,使我的基于wxPython的应用程序在Mac OS X上正常工作。
注意:您必须禁用关闭按钮并设置隐藏窗口,以便它不会显示在“窗口”菜单中。
旁白:您是否考虑过将Python应用程序的GUI部分考虑在内并在Mac OS X上使用PyObjC?你会得到更多本土行为......
答案 1 :(得分:1)
如今,您可以使用wx.MenuBar.MacSetCommonMenuBar()
来设置菜单栏(必须创建),该菜单栏应在没有打开任何窗口的情况下使用。
如果您只想使用默认的macOS菜单栏(应用程序和“窗口”菜单已在其中),这似乎是最少的代码:
menubar = wx.MenuBar()
wx.MenuBar.MacSetCommonMenuBar(menubar)
这也将使您的应用程序也可以立即响应 Command + Q 。
wx.MenuItem
ID wx.ID_ABOUT
和wx.ID_EXIT
的特殊含义是menu items with those IDs are moved to the macOS Application menu。文档实际上将应用程序菜单称为“ Apple”菜单(例如,the wx.MenuBar.OSXGetAppleMenu()
function's docs中描述的菜单是应用程序菜单),