[PyQt] QTreeWidgetItem also forgets its Python counterpart

Wilbert Berendsen wbsoft at xs4all.nl
Tue Mar 12 05:42:08 GMT 2013


I am having a similar bug indeed in sip-4.14.3 / PyQt-4.9.6 where
QTreeWidgetItem forgets its Python state when created with a
QTreeWidget().invisibleRootItem() as parent.

After importing * from PyQt4.QtCore and QtGui:

>>> app=QApplication([])
>>> w=QTreeWidget()
>>> class Item(QTreeWidgetItem):
...   pass
>>> i=Item(w.invisibleRootItem())
>>> i.value=123
>>> del i
>>> w.topLevelItem(0)
<PyQt4.QtGui.QTreeWidgetItem object at 0xb69ceadc>
>>> w.topLevelItem(0).value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'QTreeWidgetItem' object has no attribute 'value'

But when I create Item with the treewidget itself as parent, it works:

>>> w.clear()
>>> i=Item(w)
>>> del i
>>> w.topLevelItem(0)
<__main__.Item object at 0xb69ce614>

And when I create an Item with a toplevel Item as parent, it also

>>> j=Item(w.topLevelItem(0))
>>> w.topLevelItem(0).child(0)
<__main__.Item object at 0xb69ceadc>
>>> del j
>>> w.topLevelItem(0).child(0)
<__main__.Item object at 0xb69ceadc>
>>> w.topLevelItem(0).child(0).value=123
>>> w.topLevelItem(0).child(0).value

So the bug is only that when creating a QTreeWidgetItem (even if
derived) with the QTreeWidget.invisibleRootItem() as parent, its Python
counterpart is forgotten and a new wrapped object is created.


Wilbert Berendsen

More information about the PyQt mailing list