为何变量loggedIn未定义?Python登录程序调试疑问
问题解决思路
标签不更新+变量未定义问题分析
1. 标签显示空的核心原因
你在初始化loggedInlbl时,只是把当时loggedIn的空字符串赋值给了标签文本。后续done函数里修改loggedIn的内容后,标签不会自动同步,必须手动更新它的文本属性。
2. 解决标签更新问题
修改done函数,在成功登录并赋值loggedIn后,调用loggedInlbl.config(text=loggedIn)更新标签:
if chPassword == checkPassword: global loggedIn loggedIn = i # 手动更新标签内容 loggedInlbl.config(text=loggedIn) show_frame(entries_frame1) # 找到匹配用户后跳出循环,不用继续读文件 break
3. 排查loggedIn is not defined错误
如果仍弹出这个错误,检查这几点:
- 所有用到
loggedIn的地方拼写完全一致(Python大小写敏感,别写成loggedin) - 确认
loggedIn = ""是在全局作用域声明的,且在所有引用它的代码之前(比如别把这句放到某个函数里面) - 其他未展示的代码里,如果要修改
loggedIn,必须加global loggedIn声明
修正后的关键代码
# 全局声明变量 loggedIn = "" # 先创建标签,后续可修改文本 loggedInlbl=Label(entries_frame1,text=loggedIn,font=("Calibri", 16), bg="lightgrey") loggedInlbl.grid(row=2, column=10, padx=10, pady=10) def done(): checkID = txtCID.get() checkPassword = txtCPassword.get() with open("employees.txt", "r") as empList: for i in empList: fields = i.split(", ") if len(fields) < 2: continue chID = fields[0] if chID == checkID.upper(): exPassword = fields[12] chPassword = str(exPassword) if chPassword == checkPassword: global loggedIn loggedIn = i loggedInlbl.config(text=loggedIn) show_frame(entries_frame1) break else: txtCID.delete(0,END) txtCPassword.delete(0,END)
内容的提问来源于stack exchange,提问作者William Sutton
相关产品推荐
相关产品推荐

