为什么 tkinter Label 对象中没有引用照片图像?

Why photo image is not referenced in tkinter Label object?

提问人:Xiaoyong Guo 提问时间:5/30/2021 更新时间:5/30/2021 访问量:95

问:

有一些关于标签图像被垃圾回收的相关问题。人们通常建议保留对照片的引用以防止 gc。但我仍然感到困惑。我在创建 Label 对象时想到了label.image = photoImage

labelImg = tk.Label(window, image=photoImage, width=81, height=81)

照片图像是作为参数传递的,因此对象应该已经具有对它的引用。 如果没有,构造函数对传入的对象执行什么操作?labelImgpotoImage

下面是一个示例代码:

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()
蟒蛇 tkinter

评论

0赞 Tanishka 5/30/2021
如果您正在谈论,那么它是一个宽度和高度为 81 的标签,您为其提供了图像而不是文本。labelImg
1赞 martineau 5/30/2021
tkinter不会按照您的想法工作 - 它不会创建对照片图像的引用 - 这就是为什么您需要自己做。在这种情况下,只需在创建 .labelImg.img = photoImageLabel
0赞 martineau 5/30/2021
@TanishkaVashisht:标签小组件也可能有图像。
0赞 Xiaoyong Guo 5/30/2021
@martineau我想是的。我可能需要查看代码以了解 Label 对象是如何构造的。
1赞 martineau 5/30/2021
如果它是在某个函数(或方法)中创建的,请参阅为什么在函数中创建时 Tkinter 图像不显示?。这是一个常见的问题,因为基本上在这方面我认为存在错误。tkinter

答: 暂无答案