方案简介:
此方法将ImageTk.PhotoImage处理放入类中,通过类生成对象然后再存放列表,可以成功显示。
实际操作:
1、从文件夹导入多张图片,创建tkinter窗口+画布。
import tkinter as tkfrom PIL import Image, ImageTkimport 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 = imageself.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 = 50imgY = 100for i in photo:canvas.create_image(imgX,imgY,image=i)imgX += 100
5、最终代码+效果参考。
import tkinter as tkfrom PIL import Image, ImageTkimport 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 = imageself.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 = 50imgY = 100for i in photo:canvas.create_image(imgX,imgY,image=i)imgX += 100window.mainloop()

代码+素材文件:Show PhotoList (2).zip
