【发布时间】:2011-08-19 11:32:00
【问题描述】:
我有一个 QGroupBox 小部件,其中包含要删除的子部件。我怎么做?我在the docs 中找不到任何removeWidget、removeChild、removeItem 或类似内容。我只能看到如何从布局中删除东西,但显然并没有从实际的小部件中删除它。
【问题讨论】:
-
您是要只是从 QGroupBox 中删除小部件,还是要完全删除小部件?
我有一个 QGroupBox 小部件,其中包含要删除的子部件。我怎么做?我在the docs 中找不到任何removeWidget、removeChild、removeItem 或类似内容。我只能看到如何从布局中删除东西,但显然并没有从实际的小部件中删除它。
【问题讨论】:
如果您的小部件没有依赖它的子小部件,我认为您可以使用:
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,因为它没有在您的函数之外被引用。
尝试这两种方法,看看哪种方法适合你(重复多次后不要泄漏内存)。
【讨论】:
好吧,这行得通:在我要删除的小部件上,调用widget.setParent(None)。我喜欢添加到布局中如何将小部件添加到容器中,但从布局中删除并不...有趣的东西。
【讨论】:
removeChild方法,但最好是hide
removeChild 方法,当我尝试在我的qdialog 上调用它时python 说它不存在...你能指出它在哪里吗?