Python使用PIL调整图片大小时Tkinter报图片不存在错误如何解决?
问题修复方案
错误根源
- Tkinter 控件无法直接识别 PIL 原生
Image对象,仅支持传入ImageTk.PhotoImage转换后的对象,原代码错误传入了未转换的limage ImageTk.PhotoImage对象会被 Python 垃圾回收机制自动清理,需要主动持有对象引用避免丢失- 末尾
limage.image()为无效调用,PIL Image 对象不存在该方法
修正代码
from tkinter import filedialog # 确保已导入所需依赖 from PIL import Image, ImageTk path = filedialog.askopenfilename(initialdir="C:\\Users\\josho\\Pictures", title="Choose a photo for your profile.", filetypes=(("png files", "*.png"),("jpg files", "*.jpg"), ("gif files", "*.gif"))) print(path) limage = Image.open(path) # Pillow 9.1.0及以上版本ANTIALIAS已废弃,用LANCZOS替代,旧版本可保留Image.ANTIALIAS image = limage.resize((30,22), Image.Resampling.LANCZOS) limage2=ImageTk.PhotoImage(image) Button69.config(image=limage2) # 主动绑定引用到控件属性,防止图片被垃圾回收 Button69.image = limage2
额外注意事项
- 如果这段代码写在函数内部,禁止将转换后的ImageTk对象仅存为局部变量,必须绑定到全局变量、类属性或者控件自有属性上才能保证引用不丢失
- 若运行时提示
Resampling不存在,直接将参数改回Image.ANTIALIAS即可
内容的提问来源于stack exchange,提问作者skljjdjncnjcajn
相关产品推荐
相关产品推荐

