Tkinter9宫格图片无间距显示,解决tkinter.PhotoImage(file='xx.gif')不能显示图片却不报错的问题

mac2024-03-17  25

根据上例切割的9宫格图片,采用Canvas及TK.PhotoImage无间距显示:

解决tkinter.PhotoImage(file='xx.gif')不能显示图片却不报错的问题,原因在于加载前原对象没有保存。

# -*- coding: utf-8 -*- """ Created on Tue Oct 29 17:30:40 2019 @author: Roger Liu """ import tkinter as tk import os from PIL import Image,ImageTk #TK.PhotoImage支持的图片格式有限,可先用PIL打开通过ImageTk.PhotoImage转化为TK.PhotoImage对象 import glob window = tk.Tk() window.title("多图片拼接显示") #window.geometry('1024x768') #window.maxsize(460, 300) #window.minsize(460, 300) # welcom image canvas = tk.Canvas(window, height=312, width=312) #root,dirs,img=[ a for a in os.walk(r'.\result')][0] #img=[os.path.join(root,i) for i in img] img=glob.glob(r'.\result\*[1-9].png') # glob用法,实现同样功能,iglob用来生成生成器 #print(img) image_file=[] for ix,img_name in enumerate(img): image_file.append(tk.PhotoImage(file=img_name)) x=ix%3 y=round((ix-x)/3) # print(x,y) # print(ix) canvas.create_image(104*x, 104*y, anchor='nw', image=image_file[-1]) #此时图片还未加载,原ID对象必须存在!!! canvas.create_line(104, 0, 104, 312,width=2,fill='gray') canvas.create_line(208, 0, 208, 312,width=2,fill='gray') canvas.create_line(0, 104, 312, 104,width=2,fill='gray') canvas.create_line(0, 208, 312, 208,width=2,fill='gray') ''' 错误示范,只在右下角显示图片9,DEBUGGGGGGG for ix,img_name in enumerate(img): img_name=os.path.join(root,img_name) # print(img_name) image_file=tk.PhotoImage(file=img_name) #赋值新对象给image_file,原对象未保存 x=ix%3 y=round((ix-x)/3) # print(x,y) # print(ix) print(id(image_file)) #赋新值后,原ID对象清除。 canvas.create_image(104*x, 104*y, anchor='nw', image=image_file) #此时图片还未加载 for y in range(3): for x in range(3): img_name=os.path.join(root,img[3*y+x]) print(img_name) image_file = tk.PhotoImage(file=img_name) #赋值新对象给image_file,原对象未保存 canvas.create_image((104*x, 104*y), anchor='nw', image=image_file) #此时图片还未加载 #image_file1 = tk.PhotoImage(file=r'.\result\python1.png') #image_file2 = tk.PhotoImage(file=r'.\result\python2.png') #canvas.create_image(104*0, 104*0, anchor='nw', image=image_file1) #canvas.create_image(104*2, 104*2, anchor='nw', image=image_file2) ''' canvas.pack() window.mainloop()

 

最新回复(0)