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

Tkinter按钮添加图片失败:已有方案无效,求解决

解决Tkinter PhotoImage找不到图片文件的问题

核心原因

脚本运行时的工作目录不一定是脚本文件所在的目录,导致相对路径失效。比如从其他目录通过命令行运行脚本,或者IDE默认工作目录未指向脚本所在文件夹,都会触发该错误。

解决办法

方法1:使用脚本所在目录的绝对路径

通过__file__获取脚本的绝对路径,再拼接图片路径,确保无论在哪里运行都能定位到图片:

import tkinter as tk
import os

# 获取脚本所在目录的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接图片的绝对路径
image_path = os.path.join(script_dir, "image.png")

window = tk.Tk()
window.geometry("800x600")
window.resizable(0, 0)

add_word_photo = tk.PhotoImage(file=image_path)
test_btn = tk.Button(image=add_word_photo, width=20)
test_btn.grid(row=0, column=0)
# 保留图片引用,避免被Python垃圾回收机制清空
test_btn.image = add_word_photo

text_box = tk.Entry(width=30)
text_box.grid(row=0, column=1)
title_text = tk.Label(text="Spellings List")
title_text.grid(row=3, column=0, columnspan=2)

spellings_listbox = tk.Listbox(window, width=55, height=30)
spellings_listbox.grid(row=4, column=0, columnspan=2)

spellings_listbox.insert(1, "es")

window.mainloop()

方法2:调整IDE的工作目录

如果使用PyCharm、VS Code等IDE运行脚本,需将IDE的工作目录设置为脚本所在文件夹:

  • PyCharm:打开运行配置,修改「Working directory」为脚本所在路径
  • VS Code:在.vscode/launch.json中添加"cwd": "${fileDirname}"配置

方法3:临时检查工作目录

可先添加代码查看当前工作目录,确认是否与脚本目录一致:

import os
print(os.getcwd())

若输出路径不是脚本所在目录,直接用方法1即可解决。

额外提醒

Tkinter的PhotoImage存在垃圾回收问题:若未保留对图片对象的引用,图片会被Python自动回收,导致按钮显示空白。上述代码中通过test_btn.image = add_word_photo保留了引用,可避免此问题。

内容的提问来源于stack exchange,提问作者GCIreland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52