Tkinter Canvas图片未显示:已创建持久化引用仍无法解决?
Tkinter Canvas图片不显示问题(已添加持久化引用仍失效)
你遇到的核心问题不是图片引用的问题,而是Canvas对象本身被Python垃圾回收机制清理了。
在create_canvas方法中,你创建的canvas是局部变量,当方法执行完毕后,这个局部变量会被销毁。哪怕你已经用self.logo保留了图片的引用,但承载图片的Canvas实例已经不存在了,自然无法显示图片。
修复方案
把Canvas也声明为类的实例属性,让它和AddPasswordWindow实例绑定,避免被垃圾回收:
修改create_canvas方法如下:
def create_canvas(self): # 将canvas改为实例属性self.canvas self.canvas = Canvas(self.add_window, width=205, height=205) self.canvas.create_image(102, 102, image=self.logo) self.canvas.grid(column=0, row=0)
额外验证点
- 确认
password_img.png文件路径正确:要么和脚本在同一目录,要么使用绝对路径(比如Image.open("/home/user/password_img.png")) - 确保已正确安装Pillow库:执行
pip install pillow验证,避免因库未安装导致图片加载失败
内容的提问来源于stack exchange,提问作者Nabodita Gangully
相关产品推荐
相关产品推荐

