web-dev-qa-db-ja.com

関数で作成された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()
27
thomas.winckell

変数photoは、クラスがインスタンス化された後にガベージコレクションを取得するローカル変数です。写真への参照を保存します。例:

self.photo = tkinter.PhotoImage(...)

「tkinter画像が表示されない」でGoogle検索を行うと、最初の結果は次のようになります。

http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

41
Bryan Oakley