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。