Tkinter中PhotoImage加载图片无报错但不显示的解决方法
解决Tkinter画布不显示图片的问题
嘿,这个问题我太熟了!Tkinter里画布加载图片却看不到,几乎都是那几个常见小坑,我给你一一拆解:
最核心的原因:垃圾回收把图片“吃掉”了
Python的垃圾回收机制会自动清理没有被任何对象引用的变量。你代码里的filename虽然创建了,但如果没有额外的引用绑定,它很可能会被回收,导致画布上只剩空位置。解决办法超简单,把图片对象绑定到Canvas或者窗口的属性上,让它一直被引用:from tkinter import * window=Tk() can=Canvas(window,width=500,height=500,bg="sky blue") can.pack() filename=PhotoImage(file="//home//maklab-embedded//Desktop//download.png") # 给Canvas加个属性存图片,防止被回收 can.image = filename image=can.create_image(0,0,anchor=SW,image=filename) window.mainloop()检查图片路径是否正确
你用的双斜杠路径虽然Python能识别,但有时候可能会因为系统或者权限问题出问题。建议换成单斜杠或者原始字符串写法,同时确认这个路径下确实存在download.png文件:# 单斜杠写法 filename=PhotoImage(file="/home/maklab-embedded/Desktop/download.png") # 原始字符串(避免转义问题) filename=PhotoImage(file=r"/home/maklab-embedded/Desktop/download.png")确认图片格式是否被支持
Tkinter自带的PhotoImage只支持PNG、GIF、PPM/PGM这几种格式,如果你的图片是JPG/JPEG格式,那肯定加载不出来。这时候需要用Pillow库(也就是升级版的PIL)来处理:
先安装Pillow:pip install pillow
然后修改代码:from tkinter import * from PIL import Image, ImageTk window=Tk() can=Canvas(window,width=500,height=500,bg="sky blue") can.pack() # 用Pillow加载非PNG/GIF格式的图片 img = Image.open("/home/maklab-embedded/Desktop/download.jpg") filename = ImageTk.PhotoImage(img) can.image = filename # 同样要保留引用 can.create_image(0,0,anchor=SW,image=filename) window.mainloop()
先从第一个方法试起,大部分情况下绑定引用就能解决问题啦!
内容的提问来源于stack exchange,提问作者Haritha
相关产品推荐
相关产品推荐

