[PyKDE] new PyQt4 signal mechanism
Phil Thompson
phil at riverbankcomputing.co.uk
Sun Jan 29 17:20:29 GMT 2006
On Sunday 29 January 2006 4:33 pm, Detlev Offenbach wrote:
> Hi,
>
> I have a signal, that should be emitted from a Python method with a list of
> integers. I declared it like
>
> self.emit(SIGNAL("dataChanged(int *)"), [index])
>
> However, when it triggers, I get a TypeError exception saying, that
> argument 1 is of the wrong type. What would be the correct signal
> definition?
That's a very good question.
A requirement of the new handling is that all signals are implemented in C++
under the covers (so that queued and inter-thread connections work). That
means the signature has to be something that PyQt can convert the Python
arguments to - which it can't in this case.
There are a number of options...
1. Revert to "old-style" connections in such a case. I don't like this because
you lose the queued and inter-thread connections.
2. Treat "PyObject *" (or something similar) as a special case in code that
parses the signature to allow any arbitrary Python object to be passed. This
would have the side-effect of bypassing all the marshalling/de-marshalling
that is going on when sending a Python signal to a Python slot.
3. Implicitly treat any such types as "PyObject *" as described above. The
declaration you used would then work unchanged.
I need to think about this a bit more.
Phil
More information about the PyQt
mailing list