QMessageBox 关于 MacOS 上的对话框 vs Windows / Linux
QMessageBox About dialog on MacOS vs Windows / Linux
我正在构建 PyQt5 应用程序并希望显示一些基本的 "about" 信息。我认为 QtWidgets.QMessagebox.about 是一个很好的实现:
class gGuiGlueApplication(GlueApplication):
def __init__(self):
...
menu_about_ggui = self.menuBar().addMenu("&gGui Help")
menu_about_ggui.addAction("About gGui", self.show_about_ggui)
...
def show_about_ggui(self):
"""Displays about gGui Message Box"""
QtWidgets.QMessageBox.about(
self,
"About gGui",
"gPhoton Graphical User Interface (gGui)\n"
"Developed by Duy Nguyen, Scott Fleming\nVersion: "
+ __version__
+ "\n\ngGui is provided under the AURA Software License. "
"Please see the included license for details.",
)
我已经在 Windows 和 Red Hat Enterprise Linux 7 上进行了个人测试;一切看起来都是正确的。关于按钮在右侧菜单下 "About gGui" 并显示相应的信息:
虽然我的合作者注意到在 macOS 上,它并不是这样显示的。关于选项在我制作的菜单中不可见,而是在 "Python" 菜单下,错误地标记为 "About Python":
可以理解,这自然是有关 macOS 信息的地方,但我们的用户并不明显 "python" 是我们的应用程序。看来 macOS 正在覆盖我们对 about 选项的放置和命名。我们至少希望它说 "About gGui" 而不是通用的 "About Python"。根据 Qt QMenu.addAction Docs, the first argument dictates the option title, and as per the Qt QMessageBox.about Documentation,第一个参数指示 "title"。
我们如何强制更改 macOS 中的关于文本显示为 "About gGui",甚至可以强制将关于信息显示在适当的菜单中以跨平台保持一致?
提前致谢!
其他信息:Python3.7.1、PyQt5 5.13.2、PyQt5 SIP 12.7.0、QtPy 1.9.0
P.S。请忽略 Windows 菜单屏幕截图中的 "Load gGui Sample Data" 选项
解决这个问题的最简单方法似乎是使用以下选项:
QApplication.setAttribute(Qt.AA_DontUseNativeMenuBar)
这将为您的应用程序提供您在 Windows / Linux 中看到的菜单栏,而不是屏幕顶部的系统菜单栏。也可以通过 setNativeMenuBar 方法控制各个菜单栏。但是,这种方式可能无法被某些macOs用户所接受。
根据操作的Qt for macOs: Menu Bar, an alternative solution would be to use the menu-role来控制关于菜单项的显示方式:
action = QAction(self)
action.triggered.connect(self.show_about_ggui)
action.setMenuRole(QAction.AboutRole)
menu_about_ggui.addAction(action)
为了使其正常工作,您还需要正确设置您的应用程序名称,以便它替换默认值 "Python"。有关该问题的解决方案,请参阅此问题:
- Setting Mac OSX Application Menu menu bar item to other than "Python" in my python Qt application
我正在构建 PyQt5 应用程序并希望显示一些基本的 "about" 信息。我认为 QtWidgets.QMessagebox.about 是一个很好的实现:
class gGuiGlueApplication(GlueApplication):
def __init__(self):
...
menu_about_ggui = self.menuBar().addMenu("&gGui Help")
menu_about_ggui.addAction("About gGui", self.show_about_ggui)
...
def show_about_ggui(self):
"""Displays about gGui Message Box"""
QtWidgets.QMessageBox.about(
self,
"About gGui",
"gPhoton Graphical User Interface (gGui)\n"
"Developed by Duy Nguyen, Scott Fleming\nVersion: "
+ __version__
+ "\n\ngGui is provided under the AURA Software License. "
"Please see the included license for details.",
)
我已经在 Windows 和 Red Hat Enterprise Linux 7 上进行了个人测试;一切看起来都是正确的。关于按钮在右侧菜单下 "About gGui" 并显示相应的信息:
虽然我的合作者注意到在 macOS 上,它并不是这样显示的。关于选项在我制作的菜单中不可见,而是在 "Python" 菜单下,错误地标记为 "About Python":
可以理解,这自然是有关 macOS 信息的地方,但我们的用户并不明显 "python" 是我们的应用程序。看来 macOS 正在覆盖我们对 about 选项的放置和命名。我们至少希望它说 "About gGui" 而不是通用的 "About Python"。根据 Qt QMenu.addAction Docs, the first argument dictates the option title, and as per the Qt QMessageBox.about Documentation,第一个参数指示 "title"。
我们如何强制更改 macOS 中的关于文本显示为 "About gGui",甚至可以强制将关于信息显示在适当的菜单中以跨平台保持一致?
提前致谢!
其他信息:Python3.7.1、PyQt5 5.13.2、PyQt5 SIP 12.7.0、QtPy 1.9.0
P.S。请忽略 Windows 菜单屏幕截图中的 "Load gGui Sample Data" 选项
解决这个问题的最简单方法似乎是使用以下选项:
QApplication.setAttribute(Qt.AA_DontUseNativeMenuBar)
这将为您的应用程序提供您在 Windows / Linux 中看到的菜单栏,而不是屏幕顶部的系统菜单栏。也可以通过 setNativeMenuBar 方法控制各个菜单栏。但是,这种方式可能无法被某些macOs用户所接受。
根据操作的Qt for macOs: Menu Bar, an alternative solution would be to use the menu-role来控制关于菜单项的显示方式:
action = QAction(self)
action.triggered.connect(self.show_about_ggui)
action.setMenuRole(QAction.AboutRole)
menu_about_ggui.addAction(action)
为了使其正常工作,您还需要正确设置您的应用程序名称,以便它替换默认值 "Python"。有关该问题的解决方案,请参阅此问题:
- Setting Mac OSX Application Menu menu bar item to other than "Python" in my python Qt application