[PyKDE] PyQt4: PyObject in SIGNAL

Giovanni Bajo rasky at develer.com
Sun Dec 3 23:55:20 GMT 2006

Phil Thompson wrote:

>> But this still does not answer my question: what does "PyObject" means in
>> the signature of a signal?
> This was my original email: 
> http://mats.imk.fraunhofer.de/pipermail/pykde/2006-February/012358.html

In this mail, you said that SIGNAL("foo(PyObject*)") and SIGNAL("foo") are the 
same. In my application, the latter does work, but the former was causing a 
random crash in the code (the object that arrived in the slot was "wrong", it 
had a different id() than the object that was being emitted, and basically 
caused a core dump as soon as you accessed it somehow).

I guess there is a bug somewhere. Do you need a repro recipe?

> Also, PyQt doesn't do anything special with the reference counts of PyObject * 
> arguments, so you have to make sure that the objects stay alive until all the 
> slots in other threads have been run.

In the crash experimented above, there were no threads involved. There was a 
QProcess, but I don't think that changes things much.

> It might be possible to wrap a PyObject * in a C++ class that can be passed to 
> qRegisterMetaType() and that handles the reference count. I think that would 
> mean that you could forget the signal arguments after calling emit(). I need 
> to think about that a bit more.

I think something along these lines would be great.
Giovanni Bajo
Develer S.r.l.

More information about the PyQt mailing list