_tkinter.TclError: invalid command name ".!entry"错误咨询与代码排查
Tkinter登录窗口用户名获取错误修复方案
问题根源
你遇到的_tkinter.TclError: invalid command name ".!entry"错误,是因为Logged_in函数里先销毁了登录窗口(log_on.destroy()),再去读取输入框user_name的内容。窗口销毁后,内部的Entry组件会被一并回收,此时调用get()自然找不到对应的组件。
另外,之前在创建窗口的函数里直接调用user_name.get()会立即读取空内容,是因为代码执行到该位置时窗口刚创建,你还没来得及输入内容——获取输入内容的逻辑本就该放在用户点击按钮之后执行。
修复后的代码
调整Logged_in函数的执行顺序,先获取用户名再销毁窗口:
def Logged_in(): global User # 先读取输入框内容,再处理窗口销毁 User = user_name.get().lower() print(User) log_on.destroy() log_on.quit() # Log in window def Log_on(): global log_on, user_name log_on = Tk() log_on.geometry('400x300') log_on_label = Label(log_on, text="Log In", font=("Trebuchet MS", 18, "bold")) log_on_label.pack() # Username user_name_label = Label(log_on, text="Username:", font=("Trebuchet MS", 15)) user_name_label.place(x=0, y=40) user_name = Entry(log_on, width=25,font=("Trebuchet MS", 15)) user_name.place(x=100, y=40) log_in_btn = Button(log_on, text="Let's GO!", font=("Trebuchet MS", 16), command=Logged_in) log_in_btn.place(x=140, y=70) log_on.mainloop() # 必须启动窗口主循环,否则窗口无法正常显示和响应事件
额外说明
- 全局变量可适当精简,像
log_on_label、user_name_label这类无需后续操作的组件,没必要声明为全局变量。
内容的提问来源于stack exchange,提问作者kr62
相关产品推荐
相关产品推荐

