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
