[PyKDE] QApplication.notify gets QObject receiver args
    Alan Harkreader 
    alh at jenkon.com
       
    Fri Apr 26 21:18:00 BST 2002
    
    
  
Update: Extending qt.QApplication & overriding notify appears
to cause a memory leak.
Details: We discovered that the original code sample I posted
also displays a memory leak (with which we have also been struggling).
In the course of investigating that, I've simplified the example
code (minimizing py<->qt interaction) & found that the memory
leak is due to extending qt.QApplication and overriding notify. The 
code below demonstrates this, in addition to the original
complaint of args tending toward QObjects. Memory does not seem to
leak if class App is stubbed-out (i.e., class App(qt.QApplication): pass).
Now to isolate the leak...
Alan Harkreader
##################################################################
import sys
import qt
class App(qt.QApplication):
    def notify(self, receiver, event):
        if event.type() == qt.QEvent.FocusIn:
            print 'focus-in', receiver
        return qt.QApplication.notify(self, receiver, event)
class Toggle:
    wnd = None
    def __call__(self):
        if self.wnd:
            print 'close', self.wnd
            self.wnd.close(1)
            self.wnd = None
        else:
            self.wnd = qt.QMainWindow()
            main = qt.QWidget(self.wnd)
            self.wnd.setCentralWidget(main)
            layout = qt.QVBoxLayout(main)
            layout.addWidget(qt.QLineEdit(main))
            layout.addWidget(qt.QLineEdit(main))
            self.wnd.show()
            print 'open', self.wnd
Toggle = Toggle()
if __name__ == '__main__':
    app = App(sys.argv)
    wnd = qt.QMainWindow()
    btn = qt.QPushButton('Click', wnd)
    btn.resize(btn.sizeHint())
    btn.connect(btn, qt.SIGNAL('clicked()'), Toggle)
    wnd.show()
    app.connect(app, qt.SIGNAL('lastWindowClosed()'), app, qt.SLOT('quit()'))
    app.exec_loop()
    
    
More information about the PyQt
mailing list