无法打印Tkinter窗口用户输入变量,输出无关Excel内容及错误信息
解决Tkinter输入内容打印异常及存入字典的问题
嘿,我完全懂你遇到的糟心事——明明输入能正常写入Excel,但打印的时候却带出了整个Excel列的数据,根本看不到自己输入的内容对吧?这主要是因为你把用户输入直接包装成Series并追加到了原Excel列的Series里,之后打印的是合并后的整个Series,而不是单独的用户输入值。另外,pd.Series.append已经被Pandas弃用了,这也可能导致一些奇怪的输出信息。
问题根源拆解
你代码里这段逻辑是关键问题:
A = pd.Series(entry1.get()) SeriesA = SeriesA.append(A)
这里entry1.get()获取的是用户输入的字符串,你把它转成了一个单元素的Series,然后追加到从Excel读取的SeriesA(整列数据)上。之后不管你打印A、SeriesA还是entry1(entry1是Tkinter的Entry对象,打印它本来就会输出对象内存信息),自然看不到单独的用户输入内容。
解决方案
我们分三步解决:先正确获取并打印用户输入,再修正Excel写入逻辑,最后把输入存入字典。
1. 先单独获取用户输入
在处理Excel之前,先把输入值存成普通字符串变量,这样打印的时候就能看到纯输入内容了:
user_operator = entry1.get().strip() user_number = entry2.get().strip() print("用户输入的Operator:", user_operator) print("用户输入的Number:", user_number)
2. 修正Excel写入逻辑(替换弃用的append)
用pd.concat代替Series.append,这是Pandas官方推荐的合并方式,同时避免直接操作原Series:
# 读取原Excel数据 df1 = pd.read_excel(path) # 把用户输入转成单行DataFrame,再和原数据合并 new_row = pd.DataFrame({"Operator": [user_operator], "Number": [user_number]}) df2 = pd.concat([df1, new_row], ignore_index=True) # 写入Excel df2.to_excel(path, index=False)
3. 将输入存入字典
直接用获取到的普通变量构建字典就行,简单直接:
input_dict = { "Operator": user_operator, "Number": user_number } print("存入字典的内容:", input_dict)
修改后的完整代码
from tkinter import * import pandas as pd def submit_fields(): path = r'E:\subjects,classes,teachers.xlsx' # 加r避免转义字符解析问题 # 1. 获取并打印用户输入 user_operator = entry1.get().strip() user_number = entry2.get().strip() print("用户输入的Operator:", user_operator) print("用户输入的Number:", user_number) # 2. 存入字典 input_dict = { "Operator": user_operator, "Number": user_number } print("存入字典的内容:", input_dict) # 3. 写入Excel(修正逻辑+异常捕获) try: df1 = pd.read_excel(path) new_row = pd.DataFrame({"Operator": [user_operator], "Number": [user_number]}) df2 = pd.concat([df1, new_row], ignore_index=True) df2.to_excel(path, index=False) print("数据已成功写入Excel") except Exception as e: print("写入Excel时出错:", str(e)) # 清空输入框 entry1.delete(0, END) entry2.delete(0, END) master = Tk() Label(master, text="Operator").grid(row=0) Label(master, text="Number").grid(row=1) entry1 = Entry(master) entry2 = Entry(master) entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) Button(master, text='Quit', command=master.quit).grid(row=3,column=0, pady=4) Button(master, text='Submit', command=submit_fields).grid(row=3,column=1, pady=4) mainloop()
额外提示
- 路径字符串前加
r避免转义字符问题(比如\s会被当成转义序列)。 - 加
try-except捕获可能的文件读写错误,方便排查问题。
内容的提问来源于stack exchange,提问作者Zachary Ambrose
相关产品推荐
相关产品推荐

