2016-11-26 8 views
-1

私がここでやっているのは、デフォルトの動作を継承したカスタムウィジェットをQWidgetに作成することです。PyQt5で変数に割り当てられたウィジェットインスタンスが必要なのはなぜですか?

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は、この動作を示しているのですか?なぜ私は後でそれを使用しない場合でも、いくつかの変数にインスタンスを割り当てる必要がありますか?

答えて

1

理由はpythonのreference countingです。

オブジェクトにそれ以上の参照がなくなる(変数にそれを参照として渡す)と、すぐにインタープリタによって削除されます。

+0

答えをありがとう。 –

1

オブジェクトへの参照を保存しないと、オブジェクトは破棄され、そのメモリはすぐに再利用できるようにリリースされます。

+0

回答ありがとうございます。 –

関連する問題