仅用Pandas与Tkinter实现登录页:Excel数据校验及读取问题
登录页面代码问题修复(Tkinter + Pandas + Excel)
原代码存在的问题
- 拼写错误:
NONE应改为None,messagebox.showerr应改为messagebox.showerror iterrows()使用不当:该方法返回(索引, 行数据)元组,直接取行数据即可,无需额外转成DataFrame再排序- 比较逻辑错误:
reset_index(drop=True, inplace=True)是原地修改DataFrame,返回值为None,不能用来做相等比较 - 校验逻辑缺陷:循环每一行时,第一行不匹配就直接弹窗提示,应遍历完所有行都不匹配再提示错误
修正后的完整代码
import pandas as pd from tkinter import * import tkinter.messagebox as messagebox # 读取用户数据Excel文件,确保文件包含USERNAME和PASSWORD列 try: user_df = pd.read_excel("users.xlsx") except FileNotFoundError: # 文件不存在时自动初始化空文件 user_df = pd.DataFrame(columns=["USERNAME", "PASSWORD"]) user_df.to_excel("users.xlsx", index=False) def report_window(): # 登录成功后的跳转窗口示例 success_win = Toplevel(root) success_win.title("登录成功") Label(success_win, text="欢迎进入系统!").pack(padx=20, pady=20) def USPchecker(): obt_Username = UsrInp.get().strip() obt_Password = PassInp.get().strip() # 校验输入是否为空 if not obt_Username or not obt_Password: messagebox.showerror("错误", "用户名或密码不能为空") return # 遍历用户数据匹配账号密码 login_success = False for _, row in user_df.iterrows(): if row["USERNAME"] == obt_Username and row["PASSWORD"] == obt_Password: login_success = True break if login_success: report_window() else: messagebox.showerror("DOXC", "用户名或密码错误") # 构建登录主窗口 root = Tk() root.title("用户登录") # 用户名输入区域 Label(root, text="用户名:").grid(row=0, column=0, padx=10, pady=10) UsrInp = Entry(root) UsrInp.grid(row=0, column=1, padx=10, pady=10) # 密码输入区域 Label(root, text="密码:").grid(row=1, column=0, padx=10, pady=10) PassInp = Entry(root, show="*") PassInp.grid(row=1, column=1, padx=10, pady=10) # 登录按钮 Button(root, text="登录", command=USPchecker).grid(row=2, column=0, columnspan=2, pady=10) root.mainloop()
额外说明
- 确保
users.xlsx与代码在同一目录,或修改read_excel的文件路径 - 密码输入框添加
show="*"隐藏输入内容,符合登录页的隐私需求 - 增加空输入校验,避免无效提交
- 读取Excel时添加异常处理,文件不存在时自动创建空文件
内容的提问来源于stack exchange,提问作者Davinder Singh Puar
相关产品推荐
相关产品推荐

