Tkinter中路径正常但PhotoImage加载图片报image不存在错误,求解决方案
Tkinter Canvas加载图片报错
_tkinter.TclError: image {path} doesn't exist的解决方案 问题场景
在Tkinter开发中,创建Canvas组件后,尝试通过PhotoImage传入本地图片路径,调用create_image显示图片时,持续抛出_tkinter.TclError: image {path} doesn't exist错误,但图片路径和文件本身均验证有效——相同路径可通过requests获取图片,也能直接打开文件。
相关代码片段:
类初始化方法:
self.cover_canvas = Canvas(width=100, height=200)
加载图片的方法:
def load_image(self): self.cover_image = PhotoImage(self.image_loc) self.cover_canvas.create_image(50, 100, image=self.cover_image) self.cover_canvas.grid(row=4, column=1)
错误原因
Tkinter原生的PhotoImage仅支持GIF、PGM、PPM等少数图片格式,若你的图片是JPG、PNG等常见格式,即便路径正确,直接调用PhotoImage也会触发该错误。
解决方案(Pillow实现)
安装Pillow库
旧包名PIL已废弃,需使用新包名安装:pip install Pillow替换
PhotoImage为Pillow的实现
导入PIL.Image和PIL.ImageTk.PhotoImage,修改加载图片的逻辑:from PIL import Image, ImageTk def load_image(self): # 打开目标图片文件 img = Image.open(self.image_loc) # 转换为Tkinter兼容的图片对象 self.cover_image = ImageTk.PhotoImage(img) self.cover_canvas.create_image(50, 100, image=self.cover_image) self.cover_canvas.grid(row=4, column=1)注意:必须保留对
self.cover_image的引用,防止Python垃圾回收机制回收图片对象,导致图片无法正常显示。
内容的提问来源于stack exchange,提问作者Renni Stewart
相关产品推荐
相关产品推荐

