Python tkinter的PhotoImage无法正常工作

5

我正在尝试使用tkinter,但这段代码不起作用,我想知道是否有人知道原因,谢谢。

from tkinter import *
window = Tk()
window.title("tkinter stuff")
photo1 = PhotoImage("file=hs.gif")
Label(window, image=photo1).grid(row=0,column=0,sticky=W)
window.mainloop()

只是为了澄清,一个名为“tkinter stuff”的窗口出现了,但是图片没有显示。同时,在与我的代码相同的文件夹中有一个名为“hs.gif”的文件。
感谢您的帮助。
3个回答

4
你需要移动引号:
photo1 = PhotoImage(file="hs.gif")

1
以下代码是为您的问题提供示例,同时也是使用图像的清晰方法。您还可以配置窗口的背景。
import Tkinter as tk
from PIL import ImageTk, Image
window = tk.Tk()
window.title("tkinter stuff")
window.geometry("300x300")
window.configure(background='grey')
path = "hs.gif"
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(window, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
window.mainloop()

1

这不是垃圾收集器的错误,而是故意为之。因为变量的引用计数为0,并且超出范围,所以被垃圾收集。将图像分配给任何持久化对象(如根应用程序或标签)会增加引用计数,因此它不会被垃圾回收。那么,为什么标签不会被垃圾回收呢?因为在幕后,标签由其主控件引用计数,在其子项中添加它。在这里,没有提供,因此它会自动设置为根tk实例。 - ProblemsLoop
非常感谢您的解释!我最终对发生的事情进行了错误的解释,这确实不仅仅是一个错误;D。我花了很长时间费尽心思地想明白为什么图像在我的情况下无法加载。我最终用这种方式解决了它,但我并没有完全理解解决方案。谢谢! - Nidomus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接