Mac OS 上未显示菜单条目

Menu entry not shown on Mac OS

我正在尝试将我的 PyQt 程序移植到 Mac OS。我在 Linux.

上开发了它

PyQt (4) 安装在 2 台计算机上,python 3.4。一切似乎都有效。该程序在 Linux 计算机上运行完美。我只是将它转移到 mac 计算机上,并尝试 运行 它。它 运行s,除了一件事:

我有一个菜单项(在菜单栏中),用于程序的设置:

# Action to show a settings window
self.settingsAction = QtGui.QAction('Settings', self)
self.settingsAction.triggered.connect(lambda: Settings(self))

...Some code...

# Menu entry for the settings
self.menubar.addAction(self.settingsAction)

在Linux上,'Settings'条目完美显示在菜单栏中,打开设置window。但是,在 Mac OS 上,不显示设置条目。根本不显示。所有其他条目(文件、编辑、查看等)都正确显示,但设置不正确。并且没有出现异常。

卡在这里,我从来没有用过MacOS,所以我什至不知道从哪里开始调试

你有什么建议吗?

编辑:

我也试过了

# 显示设置的操作 window self.settingsAction = QtGui.QAction('Preferences', 自我) self.settingsAction.triggered.connect(lambda: 设置(self))

...Some code...

# Menu entry for the settings
self.menubar.addAction(self.settingsAction)

Mac 在菜单栏方面有奇怪的行为。请记住,mac 菜单栏显示在系统菜单栏的最顶部,而不是 window 中,例如 Windows 或 Linux machine。一种解决方案是使用 non-native 菜单栏,使其出现在 window 中,类似于 Windows 或 Linux machine。

menubar = self.menuBar()
menubar.setNativeMenuBar(False)

此外,当在mac上使用PyQt时,系统会拦截某些包含单词'Quit'、'Exit'、'Setting'、'Settings'的命令, 'preferences' 以及可能还有许多其他标签,并将它们从您的菜单栏中删除,因为它们是保留标签。如果菜单栏 header 没有项目,它将不会显示,看起来好像您没有修改菜单栏。

#exit = QtGui.QAction( 'Exit', self ) #this fails on my system
exit = QtGui.QAction( 'SomethingElse', self ) #this displays on my system
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exit)

我在这里找到了 'Exit' 信息:http://python.6.x6.nabble.com/addAction-to-menubar-td1916296.html

此外,调用 raise_(​​) 不会更改我 mac (Mavericks) 上的菜单栏。我必须手动 select window(通过单击其他地方,然后重新单击 window)以获得正确的菜单栏以显示我的 pyqt 应用程序。

我希望这可以帮助其他人解决这些问题。

谢谢@Greg。我想在 Mac 上补充一点,一个菜单必须至少有一个动作,否则它不会显示。以下是对 Mac 的影响