为什么我需要保持一个指向我的QWidget的变量?

ste*_*nci 5 python pyqt4

为什么以下示例仅在_创建无用变量时才起作用?

_变量分配和从未使用过.我认为一个好的编译器会优化甚至不创建它,相反它确实有所作为.

如果我删除_ =并离开Test(),则会创建窗口,但它会立即闪烁并消失,并且python会永久挂起.

这是代码:

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_())
Run Code Online (Sandbox Code Playgroud)

BPL*_*BPL 3

这是一个非常好的问题,我过去遇到过很多奇怪的问题,因为我的 PyQt 小部件和插件,基本上这要归功于python 垃圾收集器

_当您在进入 Qt 主循环之前将实例分配给该虚拟变量时,将会有一个活动引用,它将避免被垃圾收集器收集,因此小部件不会被销毁。