Mac OS与Windows / Linux上的QMessageBox关于对话框

我正在构建PyQt5应用程序,并希望显示一些基本的“关于”信息。我认为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上进行了个人测试;一切看起来都正确。 “关于”按钮在右侧菜单下为“关于gGui”,并显示相应的信息:

Mac OS与Windows / Linux上的QMessageBox关于对话框

Mac OS与Windows / Linux上的QMessageBox关于对话框

我的协作者虽然在macOS上注意到了,但这种方式并没有出现。关于选项在我创建的菜单中不可见,而是在“ Python”菜单下,错误地标记为“关于Python”:

Mac OS与Windows / Linux上的QMessageBox关于对话框

Mac OS与Windows / Linux上的QMessageBox关于对话框

这自然是macOS上有关信息的地方,但是对于我们的用户来说,“ python”是我们的应用程序并不明显。看来macOS覆盖了我们的About选项的位置和名称。我们至少要说“ About gGui”,而不是通用的“ About Python”。按照Qt QMenu.addAction Docs,第一个参数指定选项标题,按照Qt QMessageBox.about Documentation,第一个参数指定“标题”。

我们如何在macOS中强制将about文本更改为“ About gGui”,甚至有可能将about信息强制显示在适当的菜单上,以在各个平台之间保持一致?

谢谢!

其他信息:Python 3.7.1,PyQt5 5.13.2,PyQt5 SIP 12.7.0,QtPy 1.9.0

P.S。请忽略Windows菜单屏幕截图上的“加载gGui示例数据”选项

jerry8080 回答:Mac OS与Windows / Linux上的QMessageBox关于对话框

解决此问题的最简单方法似乎是使用以下选项:

QApplication.setAttribute(Qt.AA_DontUseNativeMenuBar)

这将为您的应用程序提供菜单栏,就像在Windows / Linux中看到的那样,而不是屏幕顶部的系统菜单栏。各个菜单栏也可以通过setNativeMenuBar方法进行控制。但是,这种方法可能不适用于macO上的某些用户。

根据Qt for macOs: Menu Bar,另一种解决方案是使用操作的menu-role控制如何显示About菜单项:

action = QAction(self)
action.triggered.connect(self.show_about_ggui)
action.setMenuRole(QAction.AboutRole)
menu_about_ggui.addAction(action)

但是,要使其正常工作,您还需要正确设置应用程序名称,以替换默认的“ Python”。有关该问题的解决方案,请参见以下问题:

本文链接:https://www.f2er.com/3089345.html

大家都在问