You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6中包含"about"的字符串无法添加至菜单栏的问题求助

解决Mac上PySide6菜单栏无法添加含"About"字符串动作的问题

别担心,这完全不是你的操作错误——这是macOS系统下Qt框架的默认行为搞的鬼!

在macOS上,Qt会自动识别所有包含"About"(大小写不敏感,不管有没有下划线之类的前缀后缀)的菜单项,并按照系统的人机交互规范,把它们自动转移到屏幕左上角的应用级菜单里(就是点击你的App名称弹出的那个菜单),而不是留在你手动创建的File菜单中。这是Qt为了适配macOS系统规范做的自动处理。

如果你一定要把这些带"About"的动作留在自己的File菜单里,只需要给对应的QAction设置菜单角色为NoRole,告诉Qt不要自动处理它就行。修改后的代码如下:

from PySide6 import QtWidgets
from PySide6.QtWidgets import QAction

class MyGUI(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('File')
        fileMenu.addAction("test", self.test) # OK
        fileMenu.addAction("A-bout", self.test) # OK
        
        # 为每个含"about"的动作设置NoRole,避免被系统转移
        about_action = QAction("About", self, triggered=self.test)
        about_action.setMenuRole(QAction.NoRole)
        fileMenu.addAction(about_action)
        
        about_upper_action = QAction("ABOUT", self, triggered=self.test)
        about_upper_action.setMenuRole(QAction.NoRole)
        fileMenu.addAction(about_upper_action)
        
        about_lower_action = QAction("about", self, triggered=self.test)
        about_lower_action.setMenuRole(QAction.NoRole)
        fileMenu.addAction(about_lower_action)
        
        about_underscore_action = QAction("_About", self, triggered=self.test)
        about_underscore_action.setMenuRole(QAction.NoRole)
        fileMenu.addAction(about_underscore_action)
        
        self.show()
        
    def test(self):
        print("test")

if __name__ == '__main__':
    app = QtWidgets.QApplication()
    ex = MyGUI()
    app.exec()

另外补充一句:如果你其实是想遵循macOS的规范,那完全不用手动添加About选项到File菜单——Qt会自动帮你在应用菜单里生成标准的About入口,你只需要重写QMainWindow的about()方法来实现对应的逻辑就可以啦。

内容的提问来源于stack exchange,提问作者John Gao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:07:33