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

根据上例切割的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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值