从布局中按名称获取小部件

时间:2014-12-01 09:43:17

标签: python qt widget

如果我想从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,标签等内的任何小部件,但不是所有小部件。

1 个答案:

答案 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...