pyqt:如何移除一个控件?
我有一个叫做 QGroupBox
的控件,里面有一些子控件,我想把这些子控件去掉。请问我该怎么做呢?我在文档里找不到什么 removeWidget
、removeChild
、removeItem
之类的东西。我只看到如何从布局中移除东西,但显然这并不能把它们从实际的控件中去掉。
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.widget() 方法获取控件的指针。在这种情况下,你不需要把变量名赋值为 None,因为它在你的函数外部没有被引用。
试试这两种方法,看看哪种对你有效(在重复多次后不要造成内存泄漏)。
44
好的,这个方法可以用:在我想要移除的那个小部件上,调用 widget.setParent(None)
。我觉得把小部件添加到布局里是把它放进了一个容器,但从布局里移除的时候却不是这样……挺有趣的。