【问题标题】:Looping over widgets inside widgets inside layouts在布局内的小部件内循环小部件
【发布时间】:2016-09-14 00:49:37
【问题描述】:
与我们这里的问题 Loop over widgets in PyQt Layout 类似,但更复杂...
我有
QVGridLayout
QGroupBox
QGridLayout
QLineEdit
我想访问 QLineEdit 但到目前为止我不知道如何访问 QGroupBox 的子项
for i in range(self.GridLayout.count()):
item = self.GridLayout.itemAt(i)
for i in range(item.count()):
lay = item.itemAt(i)
edit = lay.findChildren(QLineEdit)
print edit.text()
谁能指出我正确的方向?
【问题讨论】:
标签:
python
pyqt
qgroupbox
【解决方案1】:
当一个小部件被添加到一个布局时,它会自动成为它所设置的布局的小部件的子级。所以这个例子简化为两行:
for group in self.GridLayout.parentWidget().findChildren(QGroupBox):
for edit in group.findChildren(QLineEdit):
# do stuff with edit
但是,findChildren 是递归的,所以如果所有的行编辑都在组框中,这可以简化为单行:
for edit in self.GridLayout.parentWidget().findChildren(QLineEdit):
# do stuff with edit
【解决方案2】:
排序:
for i in range(self.GridLayout.count()):
item = self.GridLayout.itemAt(i)
if type(item.widget()) == QGroupBox:
child = item.widget().children()
我必须使用 item.widget() 来访问 GroupBox。
希望这对一些人有所帮助。