点击Change按钮时changeUsername函数未执行,如何修复并触发该函数?
问题原因与修复方案
嘿,我一眼就发现问题啦——你遇到了变量名冲突的情况:
你先定义了changeUsername()函数,但在代码后半部分,你又用同一个名字changeUsername创建了一个Button组件:
changeUsername = Button(teacherSetScreen, text="Change Username", command=changeUsernamePop)
这就把之前定义的changeUsername函数给覆盖成了Button对象,所以弹窗里的按钮设置command=changeUsername时,实际指向的是这个Button实例,而不是原来的函数,自然不会触发函数执行。
修复步骤
只需要把后面那个Button的变量名改成不冲突的名字就行,比如change_username_btn:
修正后的完整代码
teacherSetScreen = Tk() teacherSetScreen.title("Teacher Home") teacherSetScreen.geometry("300x130") newUsername = StringVar(teacherSetScreen) def changeUsername(): print("dgdfgf") newName = newUsername.get() if(validateUsername(newName)): print("Username Changed!") updateData("Username", newName) else: print("Invalid Username") def changeUsernamePop(): popup = Toplevel() labelNewUsername = Label(popup, text="New Username: ") labelNewUsername.grid(row=0, column=0, pady=4) entryNewUsername = Entry(popup, textvariable=newUsername) entryNewUsername.grid(row=0, column=1) buttonNewUsername = Button(popup, text="Change", command=changeUsername) buttonNewUsername.grid(row=1, column=0, columnspan=3, padx=50) labelUsername = Label(teacherSetScreen, text="Username: "+labelText["Username"]) labelUsername.grid(row=1, column=0, pady=4, columnspan=2, sticky=W) # 这里修改了变量名,避免和函数名冲突 change_username_btn = Button(teacherSetScreen, text="Change Username", command=changeUsernamePop) change_username_btn.grid(row=1, column=3, pady=4, columnspan=3) teacherSetScreen.mainloop()
这样修改后,弹窗里的「Change」按钮就能正确调用changeUsername()函数啦。
内容的提问来源于stack exchange,提问作者Roshan
相关产品推荐
相关产品推荐

