如何访问动态生成的 QWidgets?
How to access dynamically generated QWidgets?
我有一个生成 QGroupBox 的函数,里面有几个其他元素(按钮、LineEdits、复选框)。
def generate_whole_form(self, testbed) -> QGroupBox:
这个函数在循环中被调用,返回的QGroupBox被附加到一个数组(self.gridArray.append(current_groupbox)
),然后放入一个QGridLayout(self.gridlayout.append(current_groupbox)
)。
我现在想访问 GroupBox 中的元素,我想有两种方法可以做到:
- 我的
generate_whole_form()
returns不仅是QGroupBox,还有我以后需要处理的所有其他元素。然后我可以在循环中保存这些句柄。
- 我可以这样做:
self.gridArray[number].findChild(QWidget.QButton, "my_set_objectName")
访问单个 UI 元素。
版本 2 似乎是更简单的选择,因为我不需要管理所有返回的 UI 对象。事实上,我已经开始以这种方式实现它,但由于某种原因,每当我调用 findChild()
时,我的程序就会中断。但是,当我使用 findChildren()
.
时它工作正常
我想知道上述方法中的一种是否比另一种更好,或者是否还有第三种方法。如果首选版本二,那么当我使用 findChild()
时出了什么问题?如何正确使用这个功能?
一个更简单的解决方案是创建一个拥有小部件的 QGroupBox:
class CustomGroupBox(QGroupBox):
def __init__(self, params, parent=None):
super().__init__(parent)
self._widgets = dict()
for param in params:
# TODO: create widget using param
widget = QWidget()
# TODO: add layout
self.widgets[custom_key] = widget
@property
def widgets(self):
return self._widgets
然后:
group_box = CustomGroupBox(...)
print(group_box.widgets)
我有一个生成 QGroupBox 的函数,里面有几个其他元素(按钮、LineEdits、复选框)。
def generate_whole_form(self, testbed) -> QGroupBox:
这个函数在循环中被调用,返回的QGroupBox被附加到一个数组(self.gridArray.append(current_groupbox)
),然后放入一个QGridLayout(self.gridlayout.append(current_groupbox)
)。
我现在想访问 GroupBox 中的元素,我想有两种方法可以做到:
- 我的
generate_whole_form()
returns不仅是QGroupBox,还有我以后需要处理的所有其他元素。然后我可以在循环中保存这些句柄。 - 我可以这样做:
self.gridArray[number].findChild(QWidget.QButton, "my_set_objectName")
访问单个 UI 元素。
版本 2 似乎是更简单的选择,因为我不需要管理所有返回的 UI 对象。事实上,我已经开始以这种方式实现它,但由于某种原因,每当我调用 findChild()
时,我的程序就会中断。但是,当我使用 findChildren()
.
我想知道上述方法中的一种是否比另一种更好,或者是否还有第三种方法。如果首选版本二,那么当我使用 findChild()
时出了什么问题?如何正确使用这个功能?
一个更简单的解决方案是创建一个拥有小部件的 QGroupBox:
class CustomGroupBox(QGroupBox):
def __init__(self, params, parent=None):
super().__init__(parent)
self._widgets = dict()
for param in params:
# TODO: create widget using param
widget = QWidget()
# TODO: add layout
self.widgets[custom_key] = widget
@property
def widgets(self):
return self._widgets
然后:
group_box = CustomGroupBox(...)
print(group_box.widgets)