菜单条目未在Mac OS上显示

时间:2015-02-17 10:23:43

标签: python linux macos pyqt

我试图将我的PyQt程序移植到Mac OS。我是在Linux上开发的。

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

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

# 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上,'设置'输入完美显示在菜单栏中,并打开设置窗口。但是,在Mac OS上,不显示“设置”条目。根本不显示。所有其他条目(文件,编辑,视图等)都正确显示,但不是“设置”。并且没有例外。

我被困在这里,我从未使用过Mac OS,所以我甚至不知道从哪里开始调试。

你有什么建议吗?

编辑:

我也试过

#显示设置窗口的操作     self.settingsAction = QtGui.QAction('偏好',自我)     self.settingsAction.triggered.connect(lambda:Settings(self))

...Some code...

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

2 个答案:

答案 0 :(得分:10)

Macs对菜单栏有奇怪的行为。请记住,mac菜单栏显示在最顶层的系统菜单栏中,而不是像Windows或Linux机器上那样显示在窗口中。一种解决方案是使用非原生菜单栏,因此它出现在类似于Windows或Linux机器的窗口中。

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

此外,当在Mac上使用PyQt时,系统会拦截某些包含“退出”,“退出”,“设置”,“设置”,“偏好”以及其他大部分内容的命令,并删除它们来自你的菜单栏,因为它们是保留标签。如果菜单栏标题没有项目,它将不会显示,使其看起来好像您没有修改菜单栏。

#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)

我在此处找到了“退出”信息:http://python.6.x6.nabble.com/addAction-to-menubar-td1916296.html

另外,调用raise_()不会改变我的mac(Mavericks)上的菜单栏。我必须手动选择窗口(通过单击其他位置然后重新单击窗口)以获取正确的菜单栏以显示我的pyqt应用程序。

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

答案 1 :(得分:0)

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

相关问题