在pyq中删除框架中的所有内容

2024-10-03 19:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有一些从布局中删除特定项目的例子,但是我找不到任何简单地从框架中删除所有内容的例子。在

使用pyqt设计器,我创建了一个框架。然后使用pyuic4将文件转换为python。在主程序中,一些布局、项目和小部件被动态地插入到框架中。然而,我并没有记录所有的项目。在按钮刷新时,我想删除框架中包含的所有内容并再次填充它。在

我的问题是,有没有一种简单的方法可以删除框架中包含的所有内容,包括布局、小部件和项目。在

到现在为止,我可以:

for i in range(len(MyResourceFrame.children())):
    MyResourceFrame.children()[i].deleteLater()

但是,我有代码直接在它下面,在第一次qframe填充之后,单击repoplate会给出一个错误,即已经有一个框架,然后删除所有项。第二次点击重新填充。这是否与“稍后”想要首先超出范围有关,还是只是一个名称?在


Tags: 文件项目框架内容部件记录动态布局
2条回答

问题是QFrame内部预定义的布局。如果在QtDesigner中将其删除,则第一次单击时框架将正确显示。在

deleteLater槽只会安排删除对象。也就是说,直到控件返回到事件循环(这通常意味着在当前执行的函数返回之后),对象才会被删除。在

如果要立即删除对象,请使用sip module。这样可以删除布局及其包含的所有小部件,如下所示:

import sip
...

class Window(QtGui.QMainWindow):
    ...

    def populateFrame(self):
        self.deleteLayout(self.frame.layout())
        layout = QtGui.QVBoxLayout(self.frame)
        ...

    def deleteLayout(self, layout):
        if layout is not None:
            while layout.count():
                item = layout.takeAt(0)
                widget = item.widget()
                if widget is not None:
                    widget.deleteLater()
                else:
                    self.deleteLayout(item.layout())
            sip.delete(layout)

相关问题 更多 >