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

如何使用Tkinter获取输入框数据并写入Pandas DataFrame?

解决Tkinter输入写入Pandas DataFrame的问题

你的代码存在两个核心问题:

  • 变量作用域问题:enterbtn函数内重新赋值dataFrame时,会创建一个局部变量,无法修改全局的DataFrame对象
  • Pandas方法弃用:append方法已在Pandas 2.0及以上版本中被弃用,推荐使用pd.concat或df.loc来添加行数据

修正后的完整代码

import pandas as pd
import tkinter as tk

# 创建窗口
window = tk.Tk()
window.title("Entry Form")
window.geometry("600x600")

# 初始化Pandas数据集
myData = {
    "date": [3], 
    "temperature": [3] 
}
dataFrame = pd.DataFrame(myData)

def enterbtn():
    # 声明使用全局的dataFrame变量
    global dataFrame
    date = dateEntry.get()
    temperature = tempEntry.get()
    
    # 方案1:使用pd.concat添加新行(兼容新版Pandas,推荐)
    new_row = pd.DataFrame({"date": [date], "temperature": [temperature]})
    dataFrame = pd.concat([dataFrame, new_row], ignore_index=True)
    
    # 方案2:使用loc直接在末尾添加行(无需创建新DataFrame)
    # dataFrame.loc[len(dataFrame)] = {"date": date, "temperature": temperature}
    
    window.destroy()
    print(dataFrame)

# GUI组件布局
tk.Label(window, text="请输入温度和日期,谢谢!", font=("Calibri", 20, "bold")).grid(column=0, row=0, columnspan=2)
tk.Label(window, text="温度:", font=("Calibri", 10)).grid(column=0, row=1, sticky="e")
tempEntry = tk.Entry(window, font=("Calibri", 10))
tempEntry.grid(column=1, row=1, sticky="w")
tk.Label(window, text="日期:", font=("Calibri", 10)).grid(column=0, row=2, sticky="e")
dateEntry = tk.Entry(window, font=("Calibri", 10))
dateEntry.grid(column=1, row=2, sticky="w")
button1 = tk.Button(window, text="提交", font=("Calibri", 10), command=enterbtn)
button1.grid(column=0, row=3, columnspan=2)

# 启动窗口
window.mainloop()

关键说明

  1. 全局变量声明:在enterbtn函数开头添加global dataFrame,确保函数内修改的是全局的DataFrame对象,而非局部变量
  2. 替换append的方案:
    • pd.concat:将原DataFrame与新行组成的小DataFrame合并,ignore_index=True可重置索引,避免索引重复
    • df.loc[len(dataFrame)]:直接在DataFrame末尾插入一行,无需额外创建新对象
  3. 输入类型优化:如果需要将温度转为数值类型,可添加temperature = float(tempEntry.get()),避免存储字符串格式的数值

内容的提问来源于stack exchange,提问作者Paul Kellermann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:53:42