方案简介:
此方法将ImageTk.PhotoImage处理放入类中,通过类生成对象然后再存放列表,可以成功显示。
实际操作:
1、从文件夹导入多张图片,创建tkinter窗口+画布。
import tkinter as tk
from PIL import Image, ImageTk
import os
""" 从文件夹内导入图片名称列表 """
imageNameList = os.listdir("./素材/拼图/")
for i in imageNameList:
if 'png' not in i:
imageNameList.remove(i)
# 筛选删除列表中不是png格式的文件(mac系统会自动创建.Dstore隐藏文件)
""" 创建窗口和画布 """
window = tk.Tk()
window.geometry("900x200")
window.title("Test")
canvas = tk.Canvas(window, width=1000, height=200)
canvas.pack()
window.mainloop()
2、创建一个类,用于进行图片的ImageTk.PhotoImage处理。
""" 创建用来进行存放PhotoImage读取图片的类 """
class load_image:
def __init__(self, image):
self.image = image
self.img = ImageTk.PhotoImage(self.image)
photo.append(self.img)
3、循环调用类来将进行两次处理的图片对象放入列表中
""" 循环调用类来导入图片到列表 """
photo = []
for img in imageNameList:
img=Image.open("./素材/拼图/"+img).resize((80,80))
#先进行针对图片路径的Image.open操作
load_image(img)
#再用类进行针对已读取图片对象的PhotoImage操作
print(photo)
#看看列表是否成功导入
4、循环便利图片对象列表,显示图片。
""" 循环显示图片 """
imgX = 50
imgY = 100
for i in photo:
canvas.create_image(imgX,imgY,image=i)
imgX += 100
5、最终代码+效果参考。
import tkinter as tk
from PIL import Image, ImageTk
import os
""" 从文件夹内导入图片名称列表 """
imageNameList = os.listdir("./素材/拼图/")
for i in imageNameList:
if 'png' not in i:
imageNameList.remove(i)
# 筛选删除列表中不是png格式的文件(mac系统会自动创建.Dstore隐藏文件)
""" 创建窗口和画布 """
window = tk.Tk()
window.geometry("900x200")
window.title("Test")
canvas = tk.Canvas(window, width=1000, height=200)
canvas.pack()
""" 创建用来进行存放PhotoImage读取图片的类 """
class load_image:
def __init__(self, image):
self.image = image
self.img = ImageTk.PhotoImage(self.image)
photo.append(self.img)
""" 循环调用类来导入图片到列表 """
photo = []
for img in imageNameList:
img=Image.open("./素材/拼图/"+img).resize((80,80))
load_image(img)
print(photo)
""" 循环显示图片 """
imgX = 50
imgY = 100
for i in photo:
canvas.create_image(imgX,imgY,image=i)
imgX += 100
window.mainloop()
代码+素材文件:Show PhotoList (2).zip