是否可以在列表中保存 canvas.create_image 个图像?如果是这样,如何?

is it possible to hold canvas.create_image images in a list? If so, how?

当我在列表中追加多张 canvas.create_image 图像时,它会显示列表中的最后一张图像并忽略我放下的其余图像。当我得到列表元素的类型时,它也只是 returns int。

from PIL import Image
from PIL import ImageTk
import tkinter as tk

canvasImageList = []
canvas = tk.Canvas(root, width = 640,height =640)

img = Image.open(imgDirectory)
img = img. resize((170,170), Image.ANTIALIAS)
photoImg = ImageTk.PhotoImage(img)
canvasImageList.append(canvas.create_image(100,100, image = photoImg))
#works so far


img2 = Image.open(imgDirectory2)
img2 = img2. resize((170,170), Image.ANTIALIAS)
photoImg2 = ImageTk.PhotoImage(img2)
canvasImageList.append(canvas.create_image(100,100, image = photoImg2))
#but if you add a second image to the list the first image on the canvas dissapears but the second image still remains

print(canvasImageList)
#and if you print the list it'll print
# [1,2]


print(type(canvasImageList[0]))
#and if you get the type of an element in the list then it'll return int

我是不是傻了?

您将图片放在 canvas 中的相同位置,因此只能看到最后一张:

...
canvasImageList.append(canvas.create_image(100,100, image=photoImg))
...
canvasImageList.append(canvas.create_image(100,100, image=photoImg2)) # put at same position of photoImg
...

改变其中之一的位置。

还有 canvas.create_image(...) returns 项目 ID(一个整数),稍后可以通过 canvas.itemconfigure(...) 更改项目。

例如,如果您想稍后更改图像,请使用:

canvas.itemconfigure(canvasImageList[0], image=another_image)

考虑这行代码:

canvasImageList.append(canvas.create_image(100,100, image = photoImg))

create_image returns 一个整数标识符,不是图像也不是对象。您存储的是这个整数,而不是图像。要保存图像,您需要分两步完成:

canvasImageList.append(photoImg)
canvas.create_image(100,100, image = photoImg)