You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:40:56