pyqt:如何删除小部件?

问题描述 投票:0回答:2

我有一个

QGroupBox
小部件,其中有我想要删除的子项。我怎么做?我在
文档
中找不到任何
removeWidget
removeChild
removeItem 或类似内容。我只能看到如何从布局中删除内容,但显然,这并没有从实际的小部件中删除它。

python qt widget pyqt
2个回答
71
投票

如果您的小部件没有依赖于它的子小部件,我认为您可以使用:

layout.removeWidget(self.widget_name)
self.widget_name.deleteLater()
self.widget_name = None

根据我的测试,当小部件有孩子时,你必须:

import sip
layout.removeWidget(self.widget_name)
sip.delete(self.widget_name)
self.widget_name = None

如果您在类或全局级别没有小部件的变量名称,您仍然可以使用

layout.takeAt(index)
从布局中删除,并从该函数使用
QLayoutItem
方法返回的
QLayoutItem.widget()
中获取小部件指针,在这种情况下您不需要分配给
None
变量名称,因为它不会在您的函数外部引用。

尝试这两种方法,看看哪种方法适合你(重复多次后不要泄漏内存)。


45
投票

嗯,这可行:在要删除的小部件上,调用

widget.setParent(None)
。我喜欢添加到布局中如何将小部件添加到容器中,但从布局中删除并不......有趣的东西。

© www.soinside.com 2019 - 2024. All rights reserved.