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

2024-09-30 04:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Windows Menu

Windows About

我的合作者注意到在macOS上,它并不是这样出现的。about选项在我创建的菜单中不可见,而是在“Python”菜单下,错误地标记为“about Python”:

macOS Empty Menu

macOS About Python

可以理解,这是macOS上信息的自然来源,但对于我们的用户来说,“python”是我们的应用程序并不明显。似乎macOS正在覆盖about选项的位置和命名。我们希望,至少,让它说“aboutggui”,而不是一般的“aboutpython”。根据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

另外,请忽略Windows菜单屏幕截图上的“加载gGui示例数据”选项


Tags: self信息应用程序def选项show菜单macos
1条回答
网友
1楼 · 发布于 2024-09-30 04:29:58

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

QApplication.setAttribute(Qt.AA_DontUseNativeMenuBar)

这将为您的应用程序提供Windows/Linux中的菜单栏,而不是屏幕顶部的系统菜单栏。单个菜单栏也可以通过setNativeMenuBar方法控制。但是,macOs上的某些用户可能无法接受这种方法

根据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”。有关该问题的解决方案,请参见以下问题:

相关问题 更多 >

    热门问题