[PySide] Form dialog subclassing QDialog

Philip Starkey philip.starkey at monash.edu
Mon Mar 3 13:15:34 CET 2014

Matthew Woehlke <mw_triad <at> users.sourceforge.net> writes:

> On 2014-02-28 15:48, Jérôme wrote:
> > I wrongly assumed the dialog was destroyed at the end of the execution 
of its
> > exec_() method, and therefore it was too late to get its values.
> Ah... nope, just hidden . In fact you can call show() or even exec_() 
> again if you like (on the same dialog). It's not destroyed until it goes 
> out of scope, same as most classes.

I just want to add to this: if you have specified a parent widget when 
instantiating the QDialog, it is not destroyed until the parent widget is 
destroyed. If you set the parent widget to be your main window (which is 
likely to never be destroyed for the life of the program), and create a new 
QDialog on a button click, you will find your program leaks memory (because 
Qt is holding an internal reference to the QDialog, even though it has gone 
out of scope in Python).

It is best to call dialog.deleteLater() once you do not wish to access the 
dialog anymore.

Of course, if you plan to hide/show the same dialog many times, you don't 
have to do this, but in that case you would also be keeping a Python 
reference to the dialog around.

In general, to avoid memory usage growing in your program, call 
dialog.deleteLater() (once finished) if you don't plan to hold onto a Python 
reference to the dialog!

More information about the PySide mailing list