ホームページ >バックエンド開発 >Python チュートリアル >私の Tkinter イメージがクラス内に表示されないのはなぜですか?
クラスでは Tkinter イメージを使用できません
Tkinter では、関数内でイメージを作成すると、予期しない動作が発生する可能性があります。クラス外の次のコードは画像を正常に表示します:
import tkinter root = tkinter.Tk() canvas = tkinter.Canvas(root) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root.mainloop()
クラス内に配置された同じコードは画像を表示しません:
import tkinter class Test: def __init__(self, master): canvas = tkinter.Canvas(master) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root = tkinter.Tk() test = Test(root) root.mainloop()
解決策: の範囲画像参照
この問題は、photo 変数がクラス コンストラクター内のローカル変数であるために発生します。コンストラクターが終了すると、変数はガベージ コレクターによって破棄されます。画像が引き続き表示されるようにするには、photo 変数への参照をクラス内に保存する必要があります。これは、コードを次のように変更することで実現できます。
class Test: def __init__(self, master): self.canvas = tkinter.Canvas(master) self.canvas.grid(row=0, column=0) self.photo = tkinter.PhotoImage(file='./test.gif') self.canvas.create_image(0, 0, image=self.photo) root = tkinter.Tk() test = Test(root) root.mainloop()
photo 変数を self.photo に割り当てることで、コンストラクターが完了した後も画像への参照が維持されます。これにより、クラス内でイメージを表示できるようになります。
Tkinter イメージの問題の検索
Tkinter イメージが表示されないという同様の問題が発生した場合は、関連するイメージを検索することを忘れないでください。ドキュメントやフォーラムのスレッドは、原因と解決策についての貴重な洞察を提供します。変数のスコープと参照を維持する方法を理解することで、Tkinter アプリケーション内で画像を効果的に表示できます。
以上が私の Tkinter イメージがクラス内に表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。