如果我想从python Qt中的布局中获取特定的小部件,我该怎么办?
到目前为止我做了什么:
for i in range(self.ui.horizontalLayout_14.count()):
#here it does fail
name = self.ui.horizontalLayout_14.itemAt(i).objectName()
#if the above would had worked, then I could do something like this for example
if "button" in name:
self.ui.horizontalLayout_14.itemAt(i).widget().close()
请注意,对于该示例,我使用button
但它可能是布局,lineEdit或comboBox,标签等内的任何小部件,但不是所有小部件。
答案 0 :(得分:6)
问题是itemAt()
函数返回QLayoutItem
而不是小部件。因此,您必须调用QLayoutItem::widget()
函数来获取包含的小部件,即:
name = self.ui.horizontalLayout_14.itemAt(i).widget().objectName()
<强>更新强>
但是,使用QObject::findChild()
功能可以更轻松地完成同样的操作。即:
widget = self.ui.findChild(QPushButton, "button")
# Check whether the returned widget is null...