Hi all,

I've been using QCanvasSprites and it seems far too easy to create a seg-fault. I've worked out that the following code is a no-no:

class Main( QMainWindow ):
        def __init__( self, parent = None, name = None ):
                QMainWindow.__init__( self, parent, name )
                pixmap = [QPixmap("mySpritePicture.png")]
                spritePix = QCanvasPixmapArray( pixmap )
                self.mySprite = QCanvasSprite( spritePix, myCanvas )

If you try and call self.mySprite.show() you get a segmentation fault. I presume the reason for this is that the python garbage collector gets rid of spritePix while self.mySprite still has a reference to it within the underlying C++ code. I can fix it easily enough by changing spritePix to self.spritePix, which guarantees that it won't be prematurely cleaned up.

I've got a trickier problem though:

I want a separate class for each type of sprite, inheriting from QCanvasSprite. Following object-oriented principles, I'd like to store the pixmaps for each class of sprite within the class itself -- I can do this by passing in a dummy (blank) list of pixmaps for my sprite and then using the setSequence() method within the sprite's __init__ method:

class mySprite( QCanvasSprite ):
        def __init__( self, dummyPix, parentCanvas ):
                QCanvasSprite.__init__( self, dummyPix, parentCanvas )
                pixmap = [QPixmap("spritePicture.png")]
                self.spritePix = QCanvasPixmapArray( pixmap )
                self.setSequence( self.spritePix )

This works fine, until it comes to closing the main window -- it produces a seg fault. In this case I can't work out how to stop python cleaning things up before C++ trys to delete everything (which again, I assume is what is producing the seg fault).

Does anyone know a work-around? Can I store my sprite's pixmaps within the class itself without getting a seg-fault upon exit, or do I always have to pass them in from outside?

Thanks for your ideas......

Cheers, Solly

_______________________________________________
PyKDE mailing list    [EMAIL PROTECTED]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to