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
相关产品推荐
相关产品推荐

