[PyKDE] How do I delete a QCanvasItem?

Boudewijn Rempt boud at valdyas.org
Mon Jun 10 22:41:00 BST 2002


On Monday 10 June 2002 21:29, Stephen Green wrote:
> I've been trying to figure out how to delete a QCanvasItem from a QCanvas.
> I tried using del, QCanvas.removeChild() and removing all references to it.
> None of this works though.  I think removeChild() doesn't work because it
> takes a QObject as input, but QCanvasItem does not inherit QObject.  Does
> anybody know how to do this?
>

I've just experimented a bit, and I found that canvas items just don't
disappear. I think that's a bug. The only sure way of making items
disappear currently is to hide() them, and that could lead to prodigious
memory leaks.

#
# canvas.py
#
import sys
from qt import *
from qtcanvas import *

class cv(QCanvasView):

    def __init__(self, *args):
        self.canvas = QCanvas(100,100)

        QCanvasView.__init__(self, self.canvas, *args)

        item = QCanvasText("bla", self.canvas)
        item.move(0,0)
        item.show()
        self.canvas.resize(0, 0)
        self.canvas.update()
        self.canvas.resize(100, 100)
        self.canvas.update()

        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    QObject.connect(app, SIGNAL('lastWindowClosed()')
                     , app
                     , SLOT('quit()')
                     )
    win = cv()
    print win.canvas.allItems() # __init__ has run, so item should be 
                                # dereferenced.
    app.setMainWidget(win)
    win.show()
    app.exec_loop()
     

-- 
Boudewijn Rempt | http://www.valdyas.org




More information about the PyQt mailing list