有什么方法可以在Qgridlayout中删除Qwidget



我想要的是完全删除小部件(清除它,删除它,等等),但是它在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内部的小部件?

预先感谢!

布局将小部件重新分配给容器。因此,即使将其从布局中删除,容器小部件仍然是父的,因此不会删除小部件。您应该致电.deleteLater()告诉QT摆脱该小部件(有效清除小部件的所有参考,以便Python可以清除它):

def remRow(self, row):
    self.gridlayout.removeWidget(self.entries[row])
    self.entries[row].deleteLater()
    del self.entries[row]

如果您想永久摆脱小部件,请删除它。从Python,您可能必须调用WideTGet的DeleteLater()方法。QT应该照顾其余的,例如将其从布局中删除等。

我不确定您的问题中的del是什么,但是显然它不会删除C 。

最新更新