[PyQt] widgets and references in python

Nick Gaens mail at nickgaens.com
Tue Jun 29 12:40:22 BST 2010

You could put those QLabels in a list e.g.:

labels = []
for i in range(3):
    label = QLabel('%d' % i)
    labels.append(label) # This line prevents the garbage collection of
label after each iteration, since there's a reference to it in this list

A second option could be to add such a QLabel to a layout. This also means
the layout will store a reference to this label, preventing it from being
deleted automatically.


On Tue, Jun 29, 2010 at 11:01 AM, "V. Armando Solé" <sole at esrf.fr> wrote:

> victor wrote:
>> hello list,
>> i have encountered an issue that i have reduced to this sample code:
>> if __name__ == '__main__':
>>    import sys
>>    from PyQt4.QtGui import QLabel
>>    from PyQt4.QtCore import QTimer
>>    from PyQt4.QtGui import QApplication
>>    app = QApplication(sys.argv)
>>    for i in range(3):
>>        l = QLabel('%d' % i)
>>        l.show()
>>    QTimer.singleShot(5000, app.quit)
>>    app.exec_()
>> because i'm using the same variable to reference the instances, only one
>> instance remains (the last one) which is not really what i expect.
>> what is the way to create several widgets in a loop? thanks.
>>  As with any python object, you have to keep at least a reference to each
> of the generated objects in order to prevent garbage collection.
> Armando
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Nick Gaens
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100629/835592ae/attachment.html>

More information about the PyQt mailing list