【发布时间】:2021-10-16 18:20:49
【问题描述】:
我有一个函数可以生成一个 QGroupBox,其中包含几个其他元素(按钮、LineEdits、复选框)。
def generate_whole_form(self, testbed) -> QGroupBox:
这个函数在循环中被调用,返回的QGroupBox被附加到一个数组(self.gridArray.append(current_groupbox))中,然后放入一个QGridLayout(self.gridlayout.append(current_groupbox))中。
我现在想访问 GroupBoxes 中的元素,我想有两种方法:
- 我的
generate_whole_form()不仅返回QGroupBox,还返回我以后需要处理的所有其他元素。然后我可以将这些句柄保存在循环中。 - 我可以这样做:
self.gridArray[number].findChild(QWidget.QButton, "my_set_objectName")来访问单个 UI 元素。
版本 2 似乎是更简单的选择,因为我不需要管理所有返回的 UI 对象。事实上,我已经开始以这种方式实现它,但由于某种原因,每当我调用findChild() 时,我的程序就会中断。但是,当我使用 findChildren() 时,它可以正常工作。
我想知道上述方法中的一种是否比另一种更好,或者是否还有第三种方法。如果首选版本二,当我使用findChild() 时出了什么问题?如何正确使用该功能?
【问题讨论】:
-
您应该说明您实际上需要访问什么以及如何/何时/为什么。此外,如果
findChild的语法完全与您编写的一样,您的程序将由于语法错误而崩溃:它应该是findChild(QtWidgets.QPushButton, "my_set_objectName"),因为QWidget不是模块,并且没有QButton这样的东西。此外,您应该考虑到 python 列表是不是数组:数组是相同类型的项目的集合。 -
如果您确保所有子小部件都有唯一的名称(即相对于它们的父组框),那么您可以使用
self.gridArray[number].findChild(object, name)。