Python Tkinter Canvas使用PhotoImage加载图片不显示呈空白画布
问题根因
你的代码有两个直接导致渲染异常的问题:
- 创建
Canvas组件后未调用任何布局方法(pack/grid/place)将其挂载到主窗口,画布本身没有被加入窗口渲染树,自然无法显示任何内容。 - Tkinter 原生
PhotoImage对象存在垃圾回收机制的坑:如果对象没有被持久持有引用,会被Python自动回收,哪怕已经通过create_image绑定到画布,回收后也只会显示空白。
另外你导入的time模块全程未使用,手动调用的canvas.update()在组件未挂载的状态下没有实际作用,属于冗余代码。
修复后可运行代码
from tkinter import * HEIGHT = 500 WIDTH = 500 window = Tk() canvas = Canvas(window, height=HEIGHT, width=WIDTH) # 将Canvas通过pack布局挂载到主窗口 canvas.pack() photo_Image = PhotoImage(file='C:\\Users\\figue\\OneDrive\\Escritorio\\gatito.png') # 将图片对象绑定为canvas的属性,持久持有引用避免被垃圾回收 canvas.image = photo_Image canvas.create_image(0, 0, image=photo_Image, anchor=NW) window.mainloop()
补充说明
- 如果你后续要加载JPG格式的图片,原生
PhotoImage不支持该格式,需要借助PIL库的ImageTk.PhotoImage完成加载,当前你使用的PNG格式不需要额外依赖。 - 图片路径建议使用原始字符串写法,比如
r'C:\Users\figue\OneDrive\Escritorio\gatito.png',可以避免双反斜杠转义写错导致的路径问题。
内容的提问来源于stack exchange,提问作者Blunter
相关产品推荐
相关产品推荐

