Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mac OS上未显示菜单项_Python_Linux_Macos_Pyqt - Fatal编程技术网

Python Mac OS上未显示菜单项

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

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

PyQt(4)安装在两台计算机上,使用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('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)