Python 为什么照片图像未在tkinter标签对象中引用?
关于标签图像已被垃圾收集,有几个相关问题。人们通常建议参考照片Python 为什么照片图像未在tkinter标签对象中引用?,python,tkinter,Python,Tkinter,关于标签图像已被垃圾收集,有几个相关问题。人们通常建议参考照片label.image=photoImage,以防止gc。但我还是很困惑。我认为在创建标签对象时 labelImg = tk.Label(window, image=photoImage, width=81, height=81) 照片图像作为参数传递,因此labelImg对象应该已经有了对它的引用。 如果没有,构造函数对传入的potoImage对象做什么 以下是exmaple代码: import tkinter as tk fro
label.image=photoImage
,以防止gc。但我还是很困惑。我认为在创建标签对象时
labelImg = tk.Label(window, image=photoImage, width=81, height=81)
照片图像作为参数传递,因此labelImg
对象应该已经有了对它的引用。
如果没有,构造函数对传入的potoImage
对象做什么
以下是exmaple代码:
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
window .geometry('400x510')
window.resizable(0, 0)
for n in range(5):
image = Image.open('img.jpg')
photoImage = ImageTk.PhotoImage(image.resize((81, 81)))
labelImg = tk.Label(window, image=photoImage, width=81, height=81)
labelImg.place(relx=0, rely=0.2*n)
# labelImg.image = photoImage without this line, only last photo image is shown.
window.mainloop()
如果您谈论的是
labelImg
,那么它是一个宽度和高度为81的标签,您为其提供了图像而不是文本。tkinter
的工作方式与您的想法不同-它不会创建对照片图像的引用-这就是为什么您需要自己做的原因。在这种情况下,只需在创建标签后添加一个labelImg.img=photoImage
@tanishakavashisht:widgets也可能有一个图像。@martineau我想是这样的。我可能需要查看代码以了解Label对象是如何构造的。如果它是在某个函数(或方法)中创建的,请参阅。这是一个常见的问题,这是因为在这方面,我在代码> TKTET/<代码>中会考虑到一个bug。