【问题标题】:Python: add entries to PyQt5 menu bar listPython:将条目添加到 PyQt5 菜单栏列表
【发布时间】: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


【解决方案1】:

如果问题与动态创建操作有关,那么您使用 setattr 已经完成了一半。

for name in strList:
    action = QtWidgets.QAction(MainWindow)
    setattr(self, 'action{}'.format(name), action)
    self.menuBoards.addAction(action)

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2019-02-02
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2013-01-27
    • 2019-09-09
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多