gpt4 book ai didi

python - PyQt5 中缺少 menuBar

转载 作者:太空狗 更新时间:2023-10-29 22:12:41 24 4
gpt4 key购买 nike

我一直在使用 PyQt5 开发 GUI,并希望包含一个菜单栏。但是,当我编写此功能的代码时,我的菜单不会出现。弄清楚我对如何在 PyQt5 中实现菜单栏的理解是错误的,我在网上查找了一个预先存在的示例。通过一些调整,我开发了以下测试用例:

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QAction, qApp

class Example(QMainWindow):

def __init__(self):
super().__init__()

exitAction = QAction(QIcon('exit.png'), '&Exit', self)
exitAction.triggered.connect(qApp.quit)

menubar = self.menuBar()
fileMenu = menubar.addMenu('&Testmenu')
fileMenu.addAction(exitAction)

self.show()


if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

但是,当我运行它时,找不到 Testmenu

在使用 pyuic5 将 .ui 文件转换为可导入的 .py 之前,我还尝试在 QTCreator 中创建菜单栏(以及我的 GUI 布局的其余部分)。我认为这会消除我这边的一些编程错误,但菜单栏仍然不会显示。有什么想法吗?

编辑:

我在 Jupyter 笔记本 4.1 版中使用 Python 3.5 (Anaconda 4.1) 运行此代码。我还使用运行 os 10.1l、PyQt 5.7 和 Qt 5.7.0 版的 Macbook。

我已经意识到,如果我单击应用程序窗口然后单击返回窗口,菜单栏将变得响应 - 有效地取消焦点和聚焦应用程序。有了这些信息,我意识到我不是第一个注意到这个问题的人(参见 https://github.com/robotology/yarp/issues/457 )。不幸的是,我仍然不确定如何解决这个问题。

最佳答案

这不是 Qt 和 PyQt5 的错误。

我认为您的代码是 zetcode pyqt5 menubar tutorial .我在 Mac OS 上遇到了完全相同的问题。

第一个解决方案是一个技巧。使用 '&Exit' 而不是 '&Exit'。在 '&Exit' 的开头插入一个空格,如下所示:

...
# exitAction = QAction(QIcon('exit.png'), '&Exit', self) # Not shown
exitAction = QAction(QIcon('exit.png'), ' &Exit', self)
...

macOS系统范围的菜单栏保留了"Exit""Quit"等关键词。同理,yurisnm's example code在 Mac OS 上仅显示除 "Quit" 之外的菜单项。实际上“退出”有TextHeuristicRole ,因此会覆盖“应用程序”菜单中的“退出”行为。当您在“Python”菜单中单击“Quit python”时,它不会退出,只会打印“quit triggered”。

如果您必须在其他菜单中使用该名称(例如文件、编辑),您需要像上面那样更改操作名称或使用 QAction::setMenuRole(...) 如下:

...
exitAction = QAction(QIcon('exit.png'), '&Exit', self)
print(exitAction.menuRole()) # It prints "1". QAction::TextHeuristicRole
exitAction.setMenuRole(QAction.NoRole)
...

请阅读以下内容,对您有所帮助。

关于python - PyQt5 中缺少 menuBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39574105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com