Tkinter中关联Entry组件输入值的Label无法正常显示如何解决
问题原因
你的代码存在2个直接导致异常的核心错误:
- 调用
StringVar的取值方法时漏写括号:代码中写的v.get没有执行方法调用,只是获取了方法对象本身,因此界面会直接打印方法的内存地址描述,也就是你看到的<bound method StringVar.get of <tkinter.StringVar object...>>内容。 - 按钮的回调参数传值错误:代码中写的
command=showmsg()会在界面初始化阶段就直接执行showmsg函数,而非将函数绑定为按钮点击的触发逻辑,最终按钮点击后不会按预期执行交互。
另外存在一个不影响当前报错、但会埋下后续bug的写法问题:你将控件.pack()的返回值直接赋值给了控件变量,而.pack()方法的返回值是None,后续如果需要操作label1、entrybox这些控件时,会因为变量值为None报错。
修复后的完整代码
import tkinter as tk from tkinter import X root = tk.Tk() root.title("Testing this thing :D") v = tk.StringVar() # 拆分控件创建和布局逻辑,避免拿到None值 label1 = tk.Label(root,text="Write your name") label1.pack() entrybox = tk.Entry(root,font= ("Arial 12"),textvariable=v) entrybox.pack(expand=True) def showmsg(): # 正确调用get()方法,补全括号 label = tk.Label(root, text = f"Hello {v.get()}",font=("Arial 12")) label.pack() # command传函数引用,不要加括号 button = tk.Button(root,font=("Arial 12"), command=showmsg,text="Done") button.pack(fill= X) root.mainloop()
关键修改点说明
- 将字符串拼接处的
v.get改为v.get(),正确执行取值方法拿到输入框内容 - 将按钮参数
command=showmsg()改为command=showmsg,传递函数引用实现点击触发 - 拆分控件实例化和
.pack()布局语句,保留控件对象的引用方便后续操作
内容的提问来源于stack exchange,提问作者Nome Sobrenome
相关产品推荐
相关产品推荐

