【问题标题】:PyQT5 Designer add checkbox i Python when I have separate file for code当我有单独的代码文件时,PyQT5 Designer 在 Python 中添加复选框
【发布时间】:2020-10-05 21:08:05
【问题描述】:

我的问题是我的 UI 中有一个名为 xxx.ui 的文件。然后正如许多人建议的那样,我创建了另一个名为 test.py 的 python 文件,我在其中放置了代码以使用我的 xxx.ui:

# imports
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import uic
import sys


class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('xxx.ui', self)
        
        self.show()


app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()

直到这个阶段一切正常。但是现在我想在程序启动时在我的 UI 中添加一个复选框,而不会弄乱 xxx.ui (因此该复选框将在程序运行时动态创建)。

我该怎么做???

提前谢谢你。

【问题讨论】:

  • 我不确定我是否理解。你用 Designer 创建了那个 ui 文件,对吧?然后,再次打开它,添加您的复选框并保存。
  • 我已经创建了 xxx.ui 文件,然后是我连接到该 ui 文件的 test.py 文件。但是因为我不想弄乱 xxx.ui 文件,所以我决定在 test.py 文件中动态添加该复选框,使 xxx.ui 文件保持不变。
  • 我遇到的问题是:如何添加该复选框以及以后如何引用它(我知道我必须使用 findchild 或类似的东西)
  • 我不知道谁告诉你必须使用 findChild,但只要你使用的是用 Designer 创建的 UI,你肯定不会,因为所有小部件都可以通过它们的对象访问名称(self.pushButtonself.tableWidgetself.label_2 等),在小部件树面板上可见。我强烈建议您阅读Designer documentation,因为您关于添加复选框的问题清楚地表明您需要澄清很多事情才能使用它。
  • 设法弄明白了 :) 感谢您的帮助。

标签: python checkbox pyqt5


【解决方案1】:

经过多次失败尝试,我找到了解决方法:

在 xxx.ui 文件之外添加复选框。我去了我的 test.py 文件并在这一行下面添加了代码:

uic.loadUi('xxx.ui', self)

代码看起来像这样(我正在使用在名为 seasonLayout 的设计器中创建的水平布局小部件,我的复选框位于该布局内):

self.checkBox = QtWidgets.QCheckBox(self.horizontalLayoutWidget)
self.checkBox.setObjectName("checkBox_0")
self.checkBox.setText('Hello')
self.seasonLayout.addWidget(self.checkBox)

那么如果你想得到那个对象,你所要做的就是使用下面的代码:

(这里我更改了这个新创建的复选框的文本):

self.checkBoxs = self.findChild(QtWidgets.QCheckBox, 'checkBox_0')
self.checkBoxs.setText('test')

希望它对其他人有所帮助,因为我真的试图在几乎所有地方找到答案,每个人都只是使用设计师的小部件 - 没有人解释如何在它之外添加它们。

【讨论】:

  • 请注意,只要您不将复杂的类结构与动态创建的没有持久引用的对象一起使用,那么在 PyQt 中很少使用对象名称来查找对象。例如,在您的情况下,只要第一个 self.checkBox 不会被覆盖,您应该再次使用相同的 self.checkBox 访问它。如果这些小部件 确实是动态创建的,那么您可能应该改用 python 数据结构(显然您不应该将它们设置为 self 属性)。除了用于 Designer UI 之外,Qt 对象名称几乎只对 css 选择器有意义。
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多