pyqt:如何删除小部件?

时间:2011-05-05 14:55:32

标签: python qt widget pyqt

我有一个QGroupBox小部件,里面有我要删除的子代。我怎么做?我在the docs中找不到任何removeWidgetremoveChildremoveItem或类似内容。我只能看到如何从布局中删除内容,但显然不会将其从实际的小部件中删除。

3 个答案:

答案 0 :(得分:39)

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

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,因为它不会在函数外引用。

尝试这两种方法,看看哪些方法适合你(重复一段时间后不要泄漏内存)。

答案 1 :(得分:25)

嗯,这很有效:在我要移除的小部件上,请致电widget.setParent(None)。我喜欢添加到布局中如何向容器中添加一个小部件,但是从布局中删除并不是......有趣的东西。

答案 2 :(得分:6)

您确定要实际删除小部件吗? hide不会这样做吗?恕我直言,接受的方法是使用show / hide使小部件显示并从用户的视图中消失。

另一种方法是使用QStackedWidget