[PyQt] Bug in QTableView.setModel()

Aaron Digulla digulla at hepe.com
Tue Jan 8 16:36:05 GMT 2008


Quoting Aaron Digulla <digulla at hepe.com>:

> Another wa would be to save all objects which pass through SIP in map
> (QObject -> Python wrapper), connect to the destroyed(QObject) signal
> and check the state when it is emitted. Does SIP notice when the python
> wrapper is destroyed? If not, it's probably possible to patch the GC
> code of Python to call an additional routine for the wrapper objects.

I whipped together a quick example of what I have in mind:

------------------------------------------------------------
import traceback
from PyQt4.QtCore import SIGNAL, QObject

guards = {}

class Ouch(QObject):
     def __init__(self):
         QObject.__init__(self)
         self.st = traceback.format_stack()

     def punch(self):
         print 'Guarded object was destroyed'
         print self.st[-3]

def guard(o):
     g = Ouch()
     assert g.connect(o, SIGNAL('destroyed()'), g.punch)
     guards[g] = None
     return o

o = guard(QObject())
del o
------------------------------------------------------------

That prints:

Guarded object was destroyed
   File "t.py", line 31, in <module>
     o = guard(QObject())

Probably not the whole nine yards but maybe two, or so...

Regards,

-- 
Aaron "Optimizer" Digulla a.k.a. Philmann Dark
"It's not the universe that's limited, it's our imagination.
Follow me and I'll show you something beyond the limits."
http://www.pdark.de/



More information about the PyQt mailing list