是否可以在列表中保存 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)
当我在列表中追加多张 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)