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

点击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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:11