如何将Tkinter文本框的事务号追加保存至TXT文件新行?
解决Tkinter保存事务号覆盖文件的问题
你的代码存在两个核心问题,导致内容被覆盖且有潜在报错风险:
- 使用
"w"模式打开文件会直接清空原有内容,需改用追加模式 Text组件与grid()方法写在同一行时,变量会被赋值为None,调用get()会触发属性错误
具体修改方案:
- 切换文件打开模式:将
open("matters.txt", "w")改为open("matters.txt", "a"),新内容会直接追加到文件末尾而非覆盖原有数据。 - 拆分组件创建与布局:把
Text组件的创建和grid()布局拆成两行,保证my_text_box指向实际的文本框对象,避免调用get()时出错。 - 可选体验优化:增加非空判断避免保存空白内容,保存后自动清空文本框方便后续输入。
修改后的完整代码:
from tkinter import * window = Tk() window.geometry("700x250") def save_text(): # 获取输入内容并去除前后空白字符 matter_num = my_text_box.get(1.0, END).strip() if matter_num: # 用追加模式打开文件,自动处理关闭操作 with open("matters.txt", "a", encoding="utf-8") as text_file: text_file.write(matter_num + "\n") # 清空文本框,方便下次输入 my_text_box.delete(1.0, END) label = Label(window, text='Save the matter number 👉 Matter number:').grid(row=3, column=1) # 拆分创建与布局,确保变量指向Text组件实例 my_text_box = Text(window, height=2, width=40) my_text_box.grid(row=3, column=2, padx=10, pady=12) save = Button(window, text="Save matter", command=save_text).grid(row=3, column=3, padx=10, pady=10) window.mainloop()
额外说明:
- 使用
with语句管理文件,无需手动调用close(),避免资源泄漏 - 每条事务号末尾添加换行符,确保内容自动换行显示
内容的提问来源于stack exchange,提问作者Mogamad Zubair Isaacs
相关产品推荐
相关产品推荐

