[PyKDE] QGraphisScene removeItem problem

V. Armando Sole sole at esrf.fr
Mon Dec 11 14:44:26 GMT 2006


At 14:20 11/12/2006 +0100, Remy Anthoine wrote:
>Greetings,
>
>I'm having trouble using the removeItem operation of a scene in PyQt4
>with python 2.5 under windows XP. Can someone explain why the
>following produces an error of type : "python.exe has encountered a
>problem and needs to close. We are sorry for the inconvenience."
>
>import sys
>from PyQt4 import QtCore, QtGui
>
>class testtotrash(QtGui.QWidget):
>    def __init__(self,parent= None):
>        QtGui.QWidget.__init__(self, parent)
>        scene = QtGui.QGraphicsScene()
>
>        scene.addText("TEST")
>
>        for i in scene.items():
>            scene.removeItem(i)
>
>if __name__ == "__main__":
>    app = QtGui.QApplication(sys.argv)
>    myTTT = testtotrash()
>    myTTT.show()
>
>    sys.exit(app.exec_())
>
>I discovered this was a problem in a larger application where I
>sometimes remove all the items of a scene. It worked fine with
>ellipses or pixmaps but not since I started using QGraphicsTextItem.
>In the larger application, I get the following message along with
>windows' "python.exe has encountered..." :
>QGraphicsScene::removeItem: item 017098D8's scene (00000000) is
>different from this scene (016AF2E8)

I guess it is because when you delete an item, its children items are 
deleted too.

I delete all items from the scene (keeping a particular one) as:

     def __clearAll(self):
         """
         Clear the print preview window, remove all items
         but and keep the page.
         """
         itemlist = self.scene.items()
         keep = self.page
         while (len(itemlist) != 1):
             if itemlist.index(keep) == 0:
                 self.scene.removeItem(itemlist[1])
             else:
                 self.scene_.removeItem(itemlist[0])
             itemlist = self.scene.items()

I hope that helps.

Armando  





More information about the PyQt mailing list