You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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),步骤如下:

  1. 终端执行 pip install pillow 安装依赖
  2. 导入PIL.Image和PIL.ImageTk模块
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:15:33