Tkinter中Entry控件的get()方法始终返回0问题求助
问题原因及解决方法
你的代码存在两个核心问题:
- 值的获取时机错误:你在程序启动时就调用
entry1.get()把值存到num_of_diners里,这时候输入框还没输入内容,拿到的是IntVar的初始默认值0。之后点击按钮时,用的还是这个一开始就固定的0,不会去读取输入框的最新内容。 - 重复创建组件的隐患:每次点击按钮都新建一个Label,会导致多个Label重叠显示,界面会越来越混乱。
修正后的代码
import tkinter as tk from tkinter import FLAT window1 = tk.Tk() window1.geometry("500x720+750+0") entry1 = tk.IntVar() # 把Entry的创建和布局分开,避免变量被赋值为None(Tkinter布局方法返回None) e1 = tk.Entry(window1, width=8, fg="darkblue", textvariable=entry1, font=('secular one', 13)) e1.place(x=20, y=60) # 提前创建结果Label,后续直接更新文本 result_label = tk.Label(window1, font=('secular one', 20)) result_label.place(x=300, y=510) def get_value(): # 每次点击按钮时,才去获取输入框的最新值 num_of_diners = entry1.get() # 更新已有Label的文本,而非重复创建 result_label.config(text=num_of_diners) tk.Button(window1, text="calculate price", command=get_value, font=('secular one', 18), relief=FLAT).place(x=20, y=500) window1.mainloop()
关键修改点
- 将
entry1.get()移到get_value函数内部,确保每次点击按钮都读取输入框的实时内容。 - 提前创建结果Label,用
config()方法更新文本,避免组件重复叠加。 - 拆分Entry的创建与布局代码,避免变量被赋值为None(这是Tkinter的常见坑)。
内容的提问来源于stack exchange,提问作者Roei
相关产品推荐
相关产品推荐

