Tkinter Entry组件无法更新,调用get()始终返回初始插入值如何解决
问题原因
- 你代码中创建
balance画布文本的逻辑是程序初始化阶段执行的,此时还未对Entry组件做修改,拿到的自然是初始值,且Tkinter的画布文本默认不会和Entry组件自动绑定同步,Entry内容修改后画布文本不会主动更新。 - 如果你后续主动调用
be.get()依然拿到初始值,排查两个点:- 调用
be.get()的时机早于你修改Entry内容的操作,比如你是在root.mainloop()启动前就执行了取值逻辑 - 代码后续意外覆盖了
be变量,导致be不再指向原来的Entry组件
- 调用
解决方法
- 先确认
be变量没有被后续代码覆盖,始终指向你创建的Entry实例。 - 不要在初始化阶段执行取值逻辑,选择用户输入完成的时机触发:
- 方案一:新增更新按钮,点击时取值并更新画布文本
示例代码:
def update_balance(): # 点击按钮时获取Entry最新输入内容 current_bal = be.get() # 修改画布文本的内容,需调用itemconfig方法 sidebar_canvas.itemconfig(balance, text=current_bal + "$") # 创建更新按钮,绑定点击回调 update_btn = Button(root, text="更新余额", command=update_balance) settings_main_canvas.create_window(300, 165, window=update_btn, anchor=W)- 方案二:绑定Entry输入事件,内容变化时自动同步
示例代码:
def sync_balance(event): current_bal = be.get() sidebar_canvas.itemconfig(balance, text=current_bal + "$") # 绑定键盘松开事件,每次输入后自动更新 be.bind("<KeyRelease>", sync_balance) - 方案一:新增更新按钮,点击时取值并更新画布文本
内容的提问来源于stack exchange,提问作者Mark George
相关产品推荐
相关产品推荐

