python - 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()
解决方案
每次通过该循环时,都会为变量pic
分配一个新tkinter.PhotoImage
对象。如果附加到该名称的前一个对象没有其他对它的引用,则将其作为垃圾回收。如此处所述:
您必须在 Python 程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象。
当 Python 对 PhotoImage 对象进行垃圾收集时(例如,当您从将图像存储在局部变量中的函数返回时),即使 Tkinter 小部件正在显示该图像,它也会被清除。
为避免这种情况,程序必须保留对图像对象的额外引用。
例如,您可以将每个图像附加pic
到列表中,以便每个图像始终具有对其的引用。
推荐阅读
- jquery - 如何使用 Laravel 检索 JSON 数据并将其存储到数据库中
- java - Apache Ignite SQL 性能 COUNT 与 SELECT
- database - 关于关系的规范化问题
- javascript - 动画线问题
- jenkins - 如何在 Jenkinsfile 中正确转义 sed 命令
- node.js - 如何阻止节点加载本地包?
- java - 在构建期间强制执行特定的 jar 版本
- reactjs - 在输入文本字段时显示上下文菜单
- flutter - Flutter根据一个widget变量的setState设置TextFormField的值
- android - Android 相对布局从下到下并排问题