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函數。因爲窗口對象被回收了,所以窗口就自動消失了
 

 

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