首页 > 解决方案 > python tkinter for循环使用并且图像未加载

问题描述

我的图像没有加载。我不知道。这是我的代码的一部分。我的图像尺寸在高度和宽度上都很小。由于某种原因,也只有最后一张图片显示:

lenlist1 = len(list1)
""" Displays text and photo """
for i in range(lenlist1):
    name = list1[i]
    Pic = Piclist[i]

    height = i * 400

    canvas.create_text(1,height,text=name,anchor=tkinter.NW)
    pic = tkinter.PhotoImage(file = Pic)
    root.pic = pic

    height2 = (i*400) + 20
    canvas.create_image(1,height2,image=pic, anchor = tkinter.NW)




frame.pack()

标签: pythoncanvastkinter

解决方案


每次通过该循环时,都会为变量pic分配一个新tkinter.PhotoImage对象。如果附加到该名称的前一个对象没有其他对它的引用,则将其作为垃圾回收。如此处所述:

您必须在 Python 程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象。

当 Python 对 PhotoImage 对象进行垃圾收集时(例如,当您从将图像存储在局部变量中的函数返回时),即使 Tkinter 小部件正在显示该图像,它也会被清除。

为避免这种情况,程序必须保留对图像对象的额外引用。

例如,您可以将每个图像附加pic到列表中,以便每个图像始终具有对其的引用。


推荐阅读