我想要的是完全删除一个小部件(清除它,删除它等等),但是它在gridlayout中,所以即使在调用removeWidget
时,它仍然保持一个指针,所以python不会我想删除该对象。这是(剥离的)代码:
def addRow(self, row):
self.entries.insert(row, QtGui.QLineEdit())
self.gridlayout.addWidget(self.entries[row], row, 0)
...
def remRow(self, row):
self.gridlayout.removeWidget(self.entries[row])
del(self.entries[row])
...
(in another function)
foo.addRow(0)
foo.remRow(0)
它从gridlayout中删除了小部件,但它没有完全删除它,所以它实际上被打包在(?)布局下面,并且小部件显然比布局大(但不确定,因为我看不到结束)。
再说一遍,有没有办法彻底删除QGridLayout中的小部件?
提前致谢!
答案 0 :(得分:3)
布局将窗口小部件重新设置为容器。因此,即使您从布局中删除它,容器窗口小部件仍然是父窗口,因此不会删除窗口小部件。你应该调用.deleteLater()
告诉Qt摆脱那个小部件(有效地清除小部件的所有引用,以便Python可以清除它):
def remRow(self, row):
self.gridlayout.removeWidget(self.entries[row])
self.entries[row].deleteLater()
del self.entries[row]
答案 1 :(得分:1)
如果你想彻底摆脱小部件,只需将其删除即可。从Python,您可能必须调用widget的deleteLater()方法。 Qt应该处理剩下的事情,比如从布局等中删除它。
我不确定你问题中的del
是做什么的,但显然它不会删除C ++。