Python3中如何更新Tkinter Entry组件的StringVar?
在Python 3中更新Tkinter Entry关联的StringVar的标准方式
要更新和Entry组件绑定的StringVar,最直接标准的方法就是调用该StringVar对象的set()方法——只要你把新文本传入这个方法,Entry里的内容会自动同步更新,完全不用手动去修改Entry的内容。
看你的代码,问题出在get_var函数里:你只是定义了new_text并打印,但没有实际更新绑定的v这个StringVar。另外,函数里需要能访问到全局的v变量,所以得做一点小修改:
修改后的完整代码
import tkinter as tk from tkinter import StringVar, Button, Label, Entry def get_var(): global v # 声明要使用全局作用域的v变量 new_text = "new text" v.set(new_text) # 调用set方法更新StringVar的值 print(new_text) window = tk.Tk() window.title("My Program") v = StringVar(window, value='default text') case_name_lbl = Label(window, text="Case Name:") case_name_lbl.pack(padx=10, pady=10, side=tk.LEFT) case_name_entry = Entry(window, textvariable=v) case_name_entry.pack(fill=tk.X, expand=True, padx=10, pady=10, side=tk.LEFT) btn = Button(window, text='File', width=10, command=get_var) btn.pack(padx=10, pady=10, side=tk.LEFT) window.mainloop()
关键修改点说明
- 在
get_var函数里添加global v:因为v是在函数外部定义的全局变量,函数内部要修改它的话必须先声明使用全局变量 - 调用
v.set(new_text):这一步是核心,通过StringVar的set方法更新值,绑定的Entry会自动刷新显示新内容
另外,我还调整了你的导入语句(避免重复导入和不必要的*导入),这样代码更规范,也能避免命名冲突。
内容的提问来源于stack exchange,提问作者user2565422
相关产品推荐
相关产品推荐

