【发布时间】:2020-10-30 14:49:04
【问题描述】:
我希望在 PyQt5 菜单栏中设置带有字符串列表的条目;列表可以更改。
从 Qt Designer ui 硬编码到 py 文件,我有:
strList = ["1", "2", "3", "4" ]
self.action1 = QtWidgets.QAction(MainWindow)
self.action1.setObjectName("action1")
self.action2 = QtWidgets.QAction(MainWindow)
self.action2.setObjectName("action2")
self.action3 = QtWidgets.QAction(MainWindow)
self.action3.setObjectName("action3")
self.action4 = QtWidgets.QAction(MainWindow)
self.action4.setObjectName("action4")
self.menuBoards.addAction(self.action1)
self.menuBoards.addAction(self.action2)
self.menuBoards.addAction(self.action3)
self.menuBoards.addAction(self.action4)
self.menubar.addAction(self.menuBoards.menuAction())
不确定如何动态设置self.action,除了它应该在一个枚举循环中,但不确定如何从ui(现在是py)文件返回MainWindow。
在主程序中,我想...
import messageScriptUi
#lines later
for ix, name in enumerate(strList):
setattr(self, name, QtWidgets.QAction(MainWindow) )
#-------------help here?-------------------
self.menuBoards.addAction(self.action1)
#------------------------------------------
self.menubar.addAction(self.menuBoards.menuAction())
messageScriptUi 文件的前几行是:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget, QMainWindow
class Ui_Form(QWidget):
# Start code to copy
def __init__(self, parent):
super(self.__class__, self).__init__()
self.parent = parent
self.setupUi(parent)
def setCentralWidget(self, something):
pass
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
【问题讨论】:
-
关于你的 messageScriptUi 的无关注释:那里的逻辑似乎是错误的,我相信你可能误解了小部件应该如何创建以及它们的父级如何工作。为什么要使用
setupUi创建parent 接口?此外,如果您正在创建具有父级的小部件,则该父级应该在其__init__()参数中。最后,python 3 通常不需要像 python 2 那样在super()中指定参数。 -
您介意我向您展示我的作品(私人电子邮件),以免打扰其他读者吗?
-
我不想在 SO 上分享我的私人地址。如果您有具体问题或疑问,请添加评论或创建新帖子。
-
完全可以理解。
标签: python-3.x pyqt5 qtwidgets qaction add-action