有没有办法删除 QGridLayout 中的 QWidget?

MiJ*_*Jyn 2 python qt pyqt

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

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

那么,有什么方法可以完全删除 QGridLayout 内的小部件吗?

提前致谢!

Ava*_*ris 5

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

def remRow(self, row):
    self.gridlayout.removeWidget(self.entries[row])
    self.entries[row].deleteLater()
    del self.entries[row]
Run Code Online (Sandbox Code Playgroud)