修复UnboundLocalError报错及tkinter重启保留按钮文件路径问题求助
问题修复方案
现有代码问题说明
- 程序启动阶段未读取已保存的
Filen.json文件,重启后file_name变量默认是空值,按钮文本不会自动回填 - 原有
openu函数的else分支中读取json的操作没有将读取到的路径赋值给file_name,属于无效代码 - 未判断用户是否取消文件选择,可能将空路径写入配置文件
- 你提到的
UnboundLocalError: local variable 'file1' referenced before assignment报错一般是变量在部分分支未定义就调用,修复后的代码所有文件操作变量都在with块内定义后使用,不会触发该错误
修复后完整代码
import tkinter as tk import tkinter.filedialog as tfd import json import os window = tk.Tk() window.title("Open") window.geometry("600x400") window.resizable(False, False) file_name = "" # 启动时读取已保存的文件路径 if os.path.exists("Filen.json"): with open("Filen.json", "r", encoding="utf-8") as f: file_name = json.load(f) def openu(): global file_name if file_name == "": select_path = tfd.askopenfilename() # 仅在用户选中文件时保存路径 if select_path: file_name = select_path with open("Filen.json", "w", encoding="utf-8") as file1: json.dump(file_name, file1, indent=2, ensure_ascii=False) btn1["text"] = file_name os.startfile(file_name) else: os.startfile(file_name) # 按钮初始文本直接使用读取到的历史路径 btn1 = tk.Button(window, text=file_name, command=openu) btn1.place(x = 20, y = 25) window.mainloop()
功能说明
- 首次启动时按钮为空,点击选择文件后自动保存路径到
Filen.json,按钮文本同步更新为选中的路径 - 重启程序后自动读取之前保存的路径,按钮直接显示对应路径,点击即可直接打开文件
- 加入编码指定避免中文路径乱码,增加取消选择的判断避免写入无效空路径
内容的提问来源于stack exchange,提问作者FiolDoll
相关产品推荐
相关产品推荐

