stenci stenci - 1 year ago 94
Python Question

Why do I need to keep a variable pointing to my QWidget?

Why does the example below only work if the useless

variable is created?

variable is assigned and never used. I would assume a good compiler would optimize and not even create it, instead it does make a difference.

If I remove
_ =
and leave just
, then the window is created, but it flickers and disappears immediately, and python hangs forever.

Here is the code:

import sys
from PyQt4 import QtGui

class Test(QtGui.QWidget):
def __init__(self):

app = QtGui.QApplication(sys.argv)
_ = Test()

Answer Source

That's a very good question and I've faced a lot of weird problems in the past because of this fact with my PyQt widgets and plugins, basically that happens thanks to the python garbage collector.

When you assign your instance to that _ dummy variable before entering the Qt's main loop, there will be a living reference that will avoid to be collected by the garbage collector, therefore the widget won't be destroyed.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download