如何存储Tkinter GUI表单用户数据?函数运行后文本文件无数据
问题分析与解决
核心问题
你的代码中,按钮的command执行顺序错误:先调用submit()清空了所有输入框内容,再调用open_file()时,获取到的都是空值,因此文本文件中没有数据。
修复方案
方案1:调整执行顺序(快速修复)
将open_file()放在submit()之前执行,确保获取数据后再清空输入框:
submitbutton = ttk.Button(root, width=25, text='Submit', command=lambda: [open_file(), submit()])
方案2:合并函数(更推荐,逻辑更清晰)
将写入文件的逻辑整合到submit()中,避免顺序问题,同时优化文件写入格式:
def submit(): # 先获取所有用户输入数据 name_info = name.get() email_info = email.get() usn_info = usn.get() feed_info = textfeedback.get(1.0, END) # 写入文件(用with语句自动管理文件关闭,避免资源泄漏) with open("data.txt", 'w') as data_file: data_file.write(f"Name: {name_info}\n") data_file.write(f"Email: {email_info}\n") data_file.write(f"USN: {usn_info}\n") data_file.write(f"Feedback: {feed_info}\n") # 打印提示与清空输入 print('Name:{}'.format(name_info)) print('USN:{}'.format(usn_info)) print('Email:{}'.format(email_info)) print('Feedback:{}'.format(feed_info)) messagebox.showinfo(title='Submit', message='Thank you for your Feedback') entry_name.delete(0, END) entry_email.delete(0, END) entry_usn.delete(0, END) textfeedback.delete(1.0, END) # 按钮直接绑定submit函数 submitbutton = ttk.Button(root, width=25, text='Submit', command=submit)
补充说明
- 原代码中
lambda: [submit(), open_file()]会按列表顺序执行函数,先清空输入再获取数据,导致写入空内容。 - 使用
with open(...)语句可以自动关闭文件,比手动调用close()更安全可靠。 - 给每条数据添加标签和换行符,能让文本文件的内容更易读。
内容的提问来源于stack exchange,提问作者hidanbog
相关产品推荐
相关产品推荐

