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 的影响
我正在尝试将我的 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 的影响