Tkinter Label绑定StringVar后显示PY_VAR()而非预期文本问题求助
问题修复说明
你的代码存在3处语法/使用错误,逐一说明如下:
- Label组件绑定Tkinter动态变量的参数错误:
tk.Label的text参数仅接收普通字符串,传入StringVar对象时会直接输出对象的字符串标识(也就是你看到的PY_VAR())。如果要绑定动态变量实现内容自动更新,需要使用textvariable参数,修改为:self.label = tk.Label(self, textvariable=self.label_text) StringVar.set()方法参数错误:该方法不需要加text关键字,直接传入要设置的字符串即可,两处调用修改为:# say_hello方法内 self.label_text.set("Hello World") # say_goodbye方法内 self.label_text.set("Goodbye! \n (Closing in 2 seconds)")- 入口代码缩进错误:
if __name__ == "__main__"代码块当前缩进在Window类内部,属于类的成员代码,不会在脚本运行时自动触发。需要将其缩进调整到和class定义同级,顶格书写。
修正后完整可运行代码
import tkinter as tk class Window(tk.Tk): def __init__(self): super().__init__() self.title("Hello Tkinter") self.label_text = tk.StringVar() self.label_text.set("Choose One") self.label = tk.Label(self, textvariable=self.label_text) self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30) hello_button = tk.Button(self, text="Say Hello", command=self.say_hello) hello_button.pack(side=tk.LEFT, padx=(20,0), pady=(0,20)) goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye) goodbye_button.pack(side=tk.RIGHT, padx=(0,20), pady=(0,20)) def say_hello(self): self.label_text.set("Hello World") def say_goodbye(self): self.label_text.set("Goodbye! \n (Closing in 2 seconds)") self.after(2000, self.destroy) if __name__ == "__main__": window = Window() window.mainloop()
内容的提问来源于stack exchange,提问作者ColBeans.Python
相关产品推荐
相关产品推荐

