[PyKDE] SIP and SWIG communication

Alexandre Courbot alexandrecourbot at linuxgames.com
Sun Jun 8 11:01:00 BST 2003


Hello everybody,

I'd like to write some graphical editors for a C++ game library using PyQt. 
This library is wrapped using SWIG, and dispose of a backend system for 
graphical output (which means I can easily add a Qt backend using QPixmaps 
for images of all sort if needed).

In this context, I'd like to be able to draw game elements in a PyQt 
application. The best (at least, fastest to me) solution I can think of would 
be to write a Qt backend and to make the game elements draw themselves on a 
QPaintDevice using bitBlt.

But this involves that soon or later, I will have pass the QPixmap of an image 
to be drawn from my SWIG-wrapped lib to PyQt. Also, I'll have to give the 
destination QPaintDevice that will come from PyQt to some of my own 
functions. Take the example of an animation editor: I'll want to have the 
images drawn in a list (passing them from SWIG to PyQt), but when it will 
come to animate it, I'll rather give the destination QPaintDevice to the 
animation's blit function so it can itself choose which frame to draw there.

So all the problem is to convert Qt objects from my SWIG wrapper to valid PyQt 
objects and vice-versa. Obviously, both wrappers doesn't wrap things the same 
way. But maybe I can do something by manipulating raw pointers: SWIG objects 
contain a 'this' member that contains the raw address of the C++ object. SWIG 
also has construction classes that allow the construction of a SWIG object 
from a raw pointer. If SIP has the same capabilities, then some instance 
passing between the two should be possible. Is something like this possible? 
'sipThis' members of SIP objects look like something similar to 'this' in 
SWIG. Which type is it? Can I easily get the C++ object's pointer from it? I 
haven't found anything related to SIP objects creations from pointers - is 
there something for that?

I'm also open to your comments about this SWIG-SIP translation, and how safe 
it is (especially regarding C++ objects ownership - again, I know of a way to 
deal this with SWIG, but know only very few about SIP). Maybe also there is 
an easier way to do what I want, without such conversions - I don't know Qt 
and PyQt well, so I may have missed something obvious.

Thanks for your time and advices,
Alex.
-- 
http://www.gnurou.org




More information about the PyQt mailing list