Python Mac OS上未显示菜单项
我正在尝试将PyQt程序移植到Mac OS。我是在Linux上开发的 PyQt(4)安装在两台计算机上,使用python 3.4。一切似乎都正常。该程序在Linux计算机上运行良好。我只是把它转移到mac电脑上,然后试着运行它。它运行,除了一件事: 我有一个菜单项(在菜单栏中),用于设置程序:Python Mac OS上未显示菜单项,python,linux,macos,pyqt,Python,Linux,Macos,Pyqt,我正在尝试将PyQt程序移植到Mac OS。我是在Linux上开发的 PyQt(4)安装在两台计算机上,使用python 3.4。一切似乎都正常。该程序在Linux计算机上运行良好。我只是把它转移到mac电脑上,然后试着运行它。它运行,除了一件事: 我有一个菜单项(在菜单栏中),用于设置程序: # Action to show a settings window self.settingsAction = QtGui.QAction('Settings', self) self.settings
# 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('Preferences',self)
self.settingsAction.triggered.connect(lambda:Settings(self))
Mac电脑在菜单栏上有奇怪的行为。请记住,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)
我在这里找到了“退出”信息:
另外,调用raise_uuz()不会改变mac(Mavericks)上的菜单栏。我必须手动选择窗口(通过单击其他位置,然后重新单击窗口),以获得要为我的pyqt应用程序显示的正确菜单栏
我希望这能帮助其他人解决这些问题。谢谢@Greg。我想补充一点,在Mac上,菜单必须至少有一个动作,否则它不会显示。下面是对Mac的影响
可能是因为在OS X中,每个应用程序的菜单栏都显示在屏幕顶部。如果键入
cmd
+,
,会发生什么?@1Darco1,是的,我知道,但不是这样。Thomas,你是什么意思?在Mac Os中,设置项显示在应用程序名称
菜单中。(如果存在,此快捷方式将调用设置)Mac OS上的菜单有一些特殊行为。我不确定你是否可以在Mac OS菜单栏中添加这样的QAction;您可能需要为它创建一个实际的列表,如“文件”和“编辑”菜单,并且其中只有一项。此外,正如@Thomas提到的,在Mac OS X上,“首选项/设置”菜单位于不同的位置。
#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)