如何在Tkinter窗口/画布加载图片?遇报错求助
解决Tkinter显示图片的两种常见错误
第一个报错:_tkinter.TclError: image "paco_img" doesn't exist
你的第一段代码有两个关键问题:
canvas.create_image的image参数错误传入了字符串"paco_img",需直接传入变量paco_img- 确保
paco.png和Python脚本在同一目录,或使用完整文件路径(如"C:/xxx/paco.png")
修正后的原生Tkinter代码:
from tkinter import * PINK = "#e2979c" RED = "#e7305b" GREEN = "#9bdeac" YELLOW = "#f7f5dd" BLUE = "#678ac2" FONT_NAME = "Courier" window = Tk() window.title("Thomas' Elevator Pitch") window.config(padx=200, pady=100, bg=BLUE) canvas = Canvas(width=5000, height=4000, bg=BLUE) paco_img = PhotoImage(file="paco.png") # 传入变量paco_img,而非字符串"paco_img" canvas.create_image(2500, 2000, image=paco_img) canvas.pack() window.mainloop()
注意:Tkinter原生PhotoImage仅支持PNG、GIF格式图片。
第二个报错:NameError: name 'ImageTk' is not defined
使用ImageTk.PhotoImage需先安装并导入PIL库(Pillow),步骤如下:
- 终端执行
pip install pillow安装依赖 - 导入
PIL.Image和PIL.ImageTk模块 image参数传变量而非字符串,且需保持图片对象引用(避免被垃圾回收)
修正后的PIL版代码:
from tkinter import * from PIL import Image, ImageTk PINK = "#e2979c" RED = "#e7305b" GREEN = "#9bdeac" YELLOW = "#f7f5dd" BLUE = "#678ac2" FONT_NAME = "Courier" window = Tk() window.title("Thomas' Elevator Pitch") window.config(padx=200, pady=100, bg=BLUE) canvas = Canvas(width=5000, height=4000, bg=BLUE) img = Image.open("paco.png") paco_img = ImageTk.PhotoImage(img) canvas.create_image(2500, 2000, image=paco_img) canvas.pack() # 保持引用,防止图片被垃圾回收 canvas.image = paco_img window.mainloop()
内容的提问来源于stack exchange,提问作者MrThom
相关产品推荐
相关产品推荐

