如果未在PySide中将对象分配给对象变量,则对象似乎将被删除

时间:2010-11-01 18:09:22

标签: python qt4 pyside

我正在尝试使用QStandardItemModel来表示数据的层次结构,但是当我将QStandardItems添加到模型时,我必须在对象成员变量中分配它们,否则对象似乎被删除。

例如

self.tree_model = QStandardItemModel()
self.tree_model.setHorizontalHeaderLabels(['Category'])
self.out_insertions = QStandardItem("Insertions")
self.tree_model.invisibleRootItem().appendRow(self.out_insertions)

按预期工作(在“类别”列下插入“插入”行)。但是,如果我删除self.out_insertion赋值,例如:

self.tree_model = QStandardItemModel()
self.tree_model.setHorizontalHeaderLabels(['Category'])
self.tree_model.invisibleRootItem().appendRow(QStandardItem("Insertions"))

它不起作用(显示空行)。

我正在使用Qt 4.6.3和PySide 0.4.1。 有人可以解释一下为什么会这样吗?

提前致谢

〜秋

1 个答案:

答案 0 :(得分:4)

您的对象会收集垃圾,因为不再存在(Python)对它的引用。

PyQt文档中的“things to be aware of”中描述了这种行为。

大多数问题(在PyQt中)可以通过纠正parenting来避免(这使得Qt取得所有权而不是PyQt)。