Python の人気のある GUI ライブラリである Tkinter では、作成時にイメージが表示されないことがよくあります。関数またはクラスメソッド内で。この奇妙な動作の背後にある理由を詳しく調べてみましょう。
クラスの外で Tkinter を使用する場合、イメージの作成と表示は簡単です。最初のコード スニペットで示したように、tkinter.PhotoImage を使用して画像を宣言し、それをキャンバスに割り当てるだけです。ただし、コードがクラス内でラップされると (2 番目のスニペットに示すように)、画像のレンダリングが停止します。
問題の鍵は、Python の変数の有効期間を理解することにあります。提供された例の photo 変数などのローカル変数は、それらが定義されている関数またはメソッドのスコープ内にのみ存在します。クラスの場合、photo 変数はクラス インスタンスの作成後に破棄されるため、Tkinter は使用できなくなります。
この状況を解決するには、関数またはメソッドのスコープ外にイメージへの参照を保存する必要があります。これは、photo 変数をクラス インスタンス自体に割り当てることで実現できます。提供されているソリューションで示されているように、
self.photo = tkinter.PhotoImage(...)
これにより、photo はインスタンス変数になり、クラス インスタンスが存在する間、その有効期間が延長されます。これにより、Tkinter がイメージにアクセスして期待どおりに表示できるようになります。
Tkinter でイメージが表示されないという同様の問題に直面した場合は、イメージ変数のスコープを必ずチェックし、イメージ変数が関数やメソッドを超えて持続していることを確認してください。それが作成されます。
以上が私の Tkinter イメージがクラス内に表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。