我有一个包含子级的 QGroupBox
组件,我想要移除其中的子级,应该怎么做? 我在文档中找不到任何 removeWidget
、removeChild
或类似的东西。 我只能看到如何从布局中删除控件,但是那显然并没有从实际的组件中删除它。
如果你的小部件没有依赖它的子小部件,我认为你可以使用:
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.widget()方法从此函数返回的QLayoutItem获取小部件指针,在这种情况下,你不需要将变量名赋值为None,因为它在函数外部没有被引用。
尝试这两种方法并查看哪种方法适合你(不要重复执行很多次以避免内存泄漏)。
好的,这样做就可以:在要移除的小部件上调用widget.setParent(None)
。我喜欢将小部件添加到布局中会自动添加到容器中,但是从布局中删除不会... 真有趣。
removeChild
方法,但最好是使用 hide
。 - Eli BenderskyremoveChild
方法,当我试图在我的qdialog上调用它时,Python显示它不存在...你能告诉我它在哪里吗? - Claudiu