Python 2.7中Tkinter组件get方法报错问题求助
解决Tkinter中get()方法的NoneType错误
嘿,这个问题我见太多啦!你遇到的'NoneType' object has no attribute 'get'错误,几乎都是因为一个超容易踩的小坑——把控件创建和布局方法写在同一行赋值了,咱们一步步拆解原因和解决方案:
错误的根源
Tkinter里的布局方法(pack()、grid()、place())有个特点:它们的返回值是None。如果你像下面这样写代码,变量station_I会被赋值为None,而不是你以为的Entry控件实例:
# 错误写法:把创建和布局放一行 station_I = Entry(root).pack()
当你后续调用station_I.get()时,本质是在给None调用方法,自然会抛出错误。
正确的写法
把控件创建和布局拆成两行,先创建控件并赋值给变量,再单独调用布局方法:
from Tkinter import * root = Tk() # 第一步:创建Entry控件,赋值给station_I station_I = Entry(root) # 第二步:调用pack()布局,这一步返回None但不影响变量 station_I.pack() # 测试按钮,点击后获取输入内容 def get_station(): print(station_I.get()) # 现在能正常获取字符串啦 Button(root, text="获取站点", command=get_station).pack() root.mainloop()
额外:用StringVar绑定的情况
如果你是通过StringVar和控件绑定,也要确保变量正确初始化,两种方式都能正常获取内容:
from Tkinter import * root = Tk() # 初始化StringVar station_var = StringVar() # 绑定到Entry控件 station_I = Entry(root, textvariable=station_var) station_I.pack() def get_station(): print(station_var.get()) # 方式1:通过StringVar获取 print(station_I.get()) # 方式2:直接通过Entry控件获取 Button(root, text="获取站点", command=get_station).pack() root.mainloop()
内容的提问来源于stack exchange,提问作者Loïc Poncin
相关产品推荐
相关产品推荐

