Python 如果未在PySide中指定给对象变量,则对象似乎已被删除

Python 如果未在PySide中指定给对象变量,则对象似乎已被删除,python,qt4,pyside,Python,Qt4,Pyside,我试图使用QStandardItemModel来表示数据的层次结构,但是当我向模型添加qstandarditem时,我必须在对象成员变量中分配它们,否则对象似乎会被删除 比如说 self.tree_model = QStandardItemModel() self.tree_model.setHorizontalHeaderLabels(['Category']) self.out_insertions = QStandardItem("Insertions") self.tree_model.

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

比如说

self.tree_model = QStandardItemModel()
self.tree_model.setHorizontalHeaderLabels(['Category'])
self.out_insertions = QStandardItem("Insertions")
self.tree_model.invisibleRootItem().appendRow(self.out_insertions)
按预期工作(在“类别”列下插入“插入”行)。但是如果我删除self.out\u插入赋值,比如:

self.tree_model = QStandardItemModel()
self.tree_model.setHorizontalHeaderLabels(['Category'])
self.tree_model.invisibleRootItem().appendRow(QStandardItem("Insertions"))
它不工作(显示一个空行)

我使用的是Qt4.6.3和PySide 0.4.1。 有人能解释一下为什么会这样吗

提前谢谢


~Aki

您的对象将被垃圾回收,因为不再存在对它的(Python)引用

PyQt文档中的“”中描述了此行为


大多数这些问题(在PyQt领域)都可以通过正确的
亲子关系
(这使得Qt拥有所有权而不是PyQt)来避免。

由于不再存在对对象的(Python)引用,因此对象会被垃圾回收

PyQt文档中的“”中描述了此行为


大多数这些问题(在PyQt领域)都可以通过正确的
亲子关系
(这使得Qt拥有所有权而不是PyQt)来避免。

这意味着QStandardItemModel不保留对项目的内部引用?!?这听起来很奇怪……好吧,我考虑过这个问题,可能是一个分配/销毁的问题。。。这就解释了为什么使用局部变量而不是对象变量不能解决问题。无论如何,我只是觉得奇怪的是,对象应该在StandardItemModel中被引用,因此不会被破坏。。。但是为什么呢?这在上面的“需要注意的事情”链接中得到了很好的解释。基本上,这是遵循pyqt方法进行绑定的一个副作用,而不是一个更具Python风格的视图——希望pyside能够在未来的版本中实现。同时,只需确保您创建的对象与更持久的更高级别实体相关联。(就像父窗口)这意味着QStandardItemModel不保留对项的内部引用?!?这听起来很奇怪……好吧,我考虑过这个问题,可能是一个分配/销毁的问题。。。这就解释了为什么使用局部变量而不是对象变量不能解决问题。无论如何,我只是觉得奇怪的是,对象应该在StandardItemModel中被引用,因此不会被破坏。。。但是为什么呢?这在上面的“需要注意的事情”链接中得到了很好的解释。基本上,这是遵循pyqt方法进行绑定的一个副作用,而不是一个更具Python风格的视图——希望pyside能够在未来的版本中实现。同时,只需确保您创建的对象与更持久的更高级别实体相关联。(类似于父窗口)