pyQt delete control

One, delete the controls in the layout without sub-layouts:

        for i in reversed(range(self.layout1.count())):#倒序删除
            item = self.layout1.itemAt(i)
            # print(type(item), type(item.widget()))
            if item.widget():
                self.layout1.itemAt(i).widget().deleteLater()
            else:#当item.widget()的返回值是None时
                self.layout1.removeItem(item);

Note that the return value of item.widget() may be None, so calling deleteLater() will cause problems, so don't call it in the statement if item.widget() == False:.

Second, delete the controls in the sub-layout

Here is only an example with only one layer of sub-layouts:

        for i in reversed(range(self.layout1.count())):#倒序删除
            item = self.layout1.itemAt(i)
            # print(type(item), type(item.widget()))
            if item.widget():
                self.layout1.itemAt(i).widget().deleteLater()
            else:
                if type(item) == type(QHBoxLayout()):
                    # print(item.count())
                    for j in reversed(range(item.count())):
                        if item.itemAt(j).widget():
                            # print('到达')
                            item.itemAt(j).widget().deleteLater()

Note that when the child layout or the control in the layout is not a global variable, the deletion may fail.

Guess you like

Origin blog.csdn.net/fly_view/article/details/130781682