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

cod*_*ler 0 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()
Run Code Online (Sandbox Code Playgroud)

请注意,对于示例,我正在使用button但它可能是布局,lineEdit或comboBox,标签等内部的任何小部件,但不是全部.

vah*_*cho 7

问题是itemAt()函数返回QLayoutItem而不是窗口小部件.所以你必须调用QLayoutItem::widget()函数来获取包含的小部件,即:

name = self.ui.horizontalLayout_14.itemAt(i).widget().objectName()
Run Code Online (Sandbox Code Playgroud)

UPDATE

但是,使用该QObject::findChild()功能可以更轻松地完成同样的操作.即:

widget = self.ui.findChild(QPushButton, "button")
# Check whether the returned widget is null...
Run Code Online (Sandbox Code Playgroud)