Why does the example below only work if the useless _
variable is created?
The _
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 Test()
, 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):
super().__init__()
self.show()
app = QtGui.QApplication(sys.argv)
_ = Test()
sys.exit(app.exec_())
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With