【发布时间】:2021-04-13 16:18:27
【问题描述】:
此代码有效:
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()
【问题讨论】:
-
effbot.org 已关闭。它的要点是图像是通过引用传递的。如果引用是对局部变量的引用,则引用的内存将被重用,并且引用变得陈旧。存储图像的变量应该与它出现的 Tk gui 对象在同一范围内(必须具有相同的生命周期)。
-
@maszoka:
effbot.org可能已关闭,但您仍然可以阅读链接 Why do my Tkinter images not appear? 感谢 Internet 档案库 wayback machine。 -
另请注意,在使用临时
PhotoImages 的任何地方都可能出现相同的问题,例如在label = Label(image=ImageTk.PhotoImage(Image.fromarray(data)))等调用序列中。
标签: python image tkinter tkinter-canvas