为什么我需要在PyQt5中为变量分配Widget实例?

时间:2016-11-26 06:15:19

标签: python pyqt pyqt5

我在这里所做的就是创建一个继承QWidget默认行为的自定义小部件。

from PyQt5.QtWidgets import QApplication, QWidget
import sys
from PyQt5.QtGui import QIcon

class CustomWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setUI()

    def setUI(self):
        self.setGeometry(300,300,0,0)
        self.setWindowTitle('CustomWidget')
        self.setWindowIcon(QIcon('icon.png'))

        self.show()

然后是创建实例的部分。当我使用以下代码段进行初始化和运行时,我看不到该小部件。

if __name__ == "__main__":
    app = QApplication(sys.argv)
    CustomWidget() <----------------------This line creates the problem
    sys.exit(app.exec_())

然而,

somevalue = CustomWidget()

而且,

_ = CustomWidget()  

我的问题是,为什么PyQt会出现这种行为?为什么我必须将实例分配给某个变量,即使我以后不使用它?

2 个答案:

答案 0 :(得分:1)

因为如果您不存储对象的引用,它将被丢弃并释放其内存以便立即重用。

答案 1 :(得分:1)

原因是python&#39; reference counting

只要一个对象没有更多的引用(将它指定给一个变量作为参考),它就会被解释器删除。