ホームページ >バックエンド開発 >Python チュートリアル >クラスメソッド内で作成すると Tkinter イメージが消えるのはなぜですか?
Python の人気のある GUI ライブラリである 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 が画像への参照を表すために発生します。クラス メソッドでは、メソッドの実行後に写真がスコープ外になるため、この参照は失われます。
これを解決するには、クラス インスタンス内に写真への永続的な参照を保存します:
import tkinter class Test: def __init__(self, master): canvas = tkinter.Canvas(master) canvas.grid(row = 0, column = 0) self.photo = tkinter.PhotoImage(file = './test.gif') canvas.create_image(0, 0, image=self.photo) root = tkinter.Tk() test = Test(root) root.mainloop()
参照を self.photo に保存すると、クラス インスタンスの存続期間中保持され、画像が表示されたままになります。
以上がクラスメソッド内で作成すると Tkinter イメージが消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。