如何在Tkinter中恢复上一会话属性并解决Text控件set方法报错问题
Tkinter 会话恢复与Text组件赋值问题解答
报错原因
你遇到的AttributeError: 'Text' object has no attribute 'set'错误,是因为Tkinter的Text多行文本框组件本身没有set()方法,set()是Entry单行输入框、StringVar变量绑定类的专属API,二者用法不能混淆。
修复代码
如果你使用的确实是Text组件,将赋值逻辑替换为Text专属的清空+插入写法即可,同时优化文件操作逻辑避免资源泄露和空文件报错:
import tkinter as tk from tkinter import END def restore(): # 用with上下文管理器自动关闭文件,指定编码避免乱码 with open('user.txt', 'r', encoding='utf-8') as file1: lines = file1.readlines() # 先判断文件是否有内容,避免索引越界 if lines: unverified_file = lines[0].strip() # 去除读取内容自带的换行符 # 先清空原有内容:1.0表示第1行第0位的起始位置,END表示文本末尾 inputtxt1.delete('1.0', END) # 插入读取到的内容 inputtxt1.insert(END, unverified_file)
如果你实际需要的是单行输入框,可以将组件改为Entry并绑定StringVar实现set()赋值:
# 初始化时绑定变量 root = tk.Tk() input_var = tk.StringVar() inputtxt1 = tk.Entry(root, textvariable=input_var) inputtxt1.pack() # 赋值时直接操作绑定的变量即可 def restore(): with open('user.txt', 'r', encoding='utf-8') as file1: lines = file1.readlines() if lines: input_var.set(lines[0].strip())
会话属性持久化方案
要实现恢复上一会话属性的功能,只需要做两步操作:
- 保存阶段:在程序关闭触发回调、或者用户点击保存按钮时,将需要持久化的属性(输入框内容、复选框选中状态、窗口尺寸位置等)写入本地文件,推荐用JSON、INI格式存储多组属性,读写更方便
- 恢复阶段:程序启动时、或者用户点击恢复按钮时,读取本地存储的配置文件,按照上述组件赋值方法将属性值赋值给对应组件即可
内容的提问来源于stack exchange,提问作者Rawan Ghanem
相关产品推荐
相关产品推荐

