pyqt5 主窗口闪现闪退

今天遇到一个很有趣的现象。就是之前运行pyqt5的主窗口的时候都是通过如下方式来呈现的:

if __name__=='__main__':
    app = QApplication(sys.argv)
    ex =Example()

    sys.exit(app.exec())

上面这种可以运行并显示一个正常的主窗口

然后呢,早上突发奇想,觉得代码可以精简,于是改成如下方式:

if __name__=='__main__':
    app = QApplication(sys.argv)
    Example()

    sys.exit(app.exec())

gg!!!!

感觉跟上面没有什么太大的差别,唯一的区别就是构造函数执行之后的结果有没有赋值的区别了

但是第二段代码执行之后出现一个很奇妙的现象,就是运行之后,窗口也会出现,但是立马闪退。一开始理解不了。后面查了相关资料,发现原因是因为:

对象赋值其实就是引用,要是没有赋值就是没有引用

具体解释:

就像linux中的硬链接一样,只有还有一个硬链接存在,那么这个文件就不会被删除。这里的对象也是一样,只要有一个指向存在,就不会被删除。可以用del方法进行验证,del方法的特性就是如果一个对象没有引用,那么python机制就会立刻执行这个del函数。所以,Example()执行完后,发现没有代码可执行了,那么内存中的对象会被清除,这样python就会自动执行del函数。因为窗口对象被回收了,所以窗口就自动消失了
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章