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
相关产品推荐
相关产品推荐

