Hello,
I am using a QTreeView to display data coming from a sqlalchemy query. All
is fine for displaying, but when I add rows, which also adds records to
the database the "internal pointers", the QAbstractItemModel so heavily
depends on, suddenly point to nowhere, because they don't keep strong
references (crashing the interpreter). I am using the reference
implementation of the editable tree example, with the small adjustment
that instead of TreeItem my sqlalchemy class is used. So, at first it
seemed like the error was produced by sqlalchemy, but with the help of the
people on the other list I could verify, that its a problem of PyQt.
To quote Conor from the sqlalchemy list:
I believe the real problem is that these "internal pointers" are not
doing proper incref/decref on the python objects they point to, so your
python objects are getting garbage collected prematurely. The
expire-on-commit readily exposes this issue, but disabling it will not
really fix the underlying problem.
A newer version of pyQT may do the incref/decref for you. If not, your
QAbstractItemModel-derived object should keep strong references to
everything that was pointed to by an "internal pointer" in a private
list or set. This should prevent them from being garbage collected.
I followed conors suggestion with the string reference list and it worked.
The objects are not garbage collected, the tree builds and extends
properly. Is there any pyqt developer, who can share his thoughts on this
and maybe help. I don't want to scream: BUG! but to Michael Bayer, the
creator of sqlalchemy this is one:
if QT is maintaining a "reference" to something using its "memory
address", but is not actually recording a strong reference to the object
within the python interpreter, that sure sounds like a bug to me. It
would imply that to use that library, every object you generate in Python
must have a strong reference maintained, or QT now references invalid
ids.
Thank you very much for helping
Sebastian
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt