[PyQt] QWidget 'destroyed' signal: possible regression?

Pierre Raybaut pierre.raybaut at gmail.com
Sun Feb 26 15:23:26 GMT 2012


Hi Phil,

I recently found out that a feature succesfully tested with older
versions of PyQt was broken
(http://code.google.com/p/spyderlib/issues/detail?id=951) and at the
same time the Matplotlib developers contacted me for a similar issue
(https://github.com/matplotlib/matplotlib/issues/711).

To explain our problem, I wrote this test script:

#-----------------------------------------------------------------------------
from PyQt4.QtGui import QApplication, QWidget
from PyQt4.QtCore import Qt

def print_from_function():
    print "Callback = Function"

class TestWidget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.destroyed.connect(print_from_function)
        self.destroyed.connect(self.print_from_method)
        self.destroyed.connect(self.print_from_static_method)
        self.destroyed.connect(lambda: self.print_from_lambda_function())
        self.setAttribute(Qt.WA_DeleteOnClose)

    def print_from_method(self):
        print "Callback = method"

    @staticmethod
    def print_from_static_method(self):
        print "Callback = static method"

    def print_from_lambda_function(self):
        print "Callback = lambda function"

app = QApplication([])
widget = TestWidget()
widget.show()
app.exec_()
#-----------------------------------------------------------------------------

The issue with the test script above is that all callbacks connected
to the 'destroyed' signal are triggered except for the callback which
is a method (bound to the object to be destroyed).

So the question is: is this a regression from PyQt v4.8.5? (or earlier)

Thanks,
-Pierre


More information about the PyQt mailing list