2

我想要的是完全删除一个小部件(清除它,删除它等......),但它在一个网格布局中,所以即使在调用时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)

它从网格布局中删除了小部件,但并没有完全删除它,因此它实际上被打包在(?)布局下方,并且小部件显然比布局大(虽然不确定,因为我看不到结尾) .

再说一遍,有没有办法完全删除 QGridLayout 中的小部件?

提前致谢!

4

2 回答 2

4

布局将小部件重新设置为容器的父级。因此,即使您从布局中删除它,容器小部件仍然是父小部件,因此不会删除该小部件。你应该打电话.deleteLater()告诉 Qt 摆脱那个小部件(有效地清除小部件的所有引用,以便 Python 可以清除它):

def remRow(self, row):
    self.gridlayout.removeWidget(self.entries[row])
    self.entries[row].deleteLater()
    del self.entries[row]
于 2012-11-01T19:46:18.903 回答
1

如果您想永久删除该小部件,只需将其删除即可。在 Python 中,您可能必须调用小部件的 deleteLater() 方法。Qt 应该处理剩下的事情,比如从布局中删除它等。

我不确定del你的问题是做什么的,但显然它没有做 C++ 删除。

于 2012-11-01T19:43:55.560 回答