61

このコードは機能します:

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()
4

3 に答える 3

89

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

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

「tkinter image doesn't display」で Google 検索を行うと、最初の結果は次のようになります。

Tkinter イメージが表示されないのはなぜですか? (FAQ の回答は現在古くなっているわけではありません)

于 2013-05-07T16:56:04.503 に答える
7
from tkinter import *
from PIL import ImageTk, Image

root = Tk()

def open_img():
    global img
    path = r"C:\.....\\"
    img = ImageTk.PhotoImage(Image.open(path))
    panel = Label(root, image=img)
    panel.pack(side="bottom", fill="both")
but1 = Button(root, text="click to get the image", command=open_img)
but1.pack()
root.mainloop() 

グローバルを img 定義に追加するだけで機能します

于 2020-08-26T13:57:15.087 に答える