使用Tkinter获取Entry组件值时触发AttributeError错误的求助
解决Tkinter中Entry组件的AttributeError问题
嘿,我来帮你搞定这个报错!你遇到的AttributeError: 'NoneType' object has no attribute 'get',其实是Tkinter新手常踩的一个小坑——你把Entry组件的创建和grid布局写在同一行导致的。
错误原因详解
Tkinter里的grid()(包括pack()、place())布局方法返回的是None。如果你直接写:
entry = tk.Entry(root).grid(row=1,column=1)
那变量entry存储的不是Entry组件对象,而是grid()返回的None。后面调用entry.get()时,自然就会报错,因为None根本没有get()方法。
修正后的代码
只需要把组件创建和布局调用拆分成两行就行,这样变量就能正确引用到组件对象了:
import Tkinter as tk root = tk.Tk() margin = 0.23 # 先创建Entry对象,再单独调用grid布局 entry = tk.Entry(root) entry.grid(row=1, column=1) def profit_calculator(): profit = margin * int(entry.get()) print(profit) # Button也建议拆分写,避免后续操作踩同样的坑 button_calc = tk.Button(root, text="Calculate", command=profit_calculator) button_calc.grid(row=2, column=1) root.mainloop()
额外提醒
不光是Entry,Tkinter里所有组件的布局方法(grid/pack/place)都返回None,所以如果之后需要对组件进行修改(比如改按钮文本、设置输入框状态),都要把创建和布局分开写,保证变量能正确指向组件实例。
内容的提问来源于stack exchange,提问作者Donald Hyman
相关产品推荐
相关产品推荐

