使用Tkinter获取输入组件值时出现'NoneType' object has no attribute 'get'错误求助
问题排查与解决方案
嘿,这个错误我一眼就看出来啦!咱们先拆解一下问题根源:
错误原因
你遇到的AttributeError: 'NoneType' object has no attribute 'get',本质是因为你把组件创建和布局方法调用写在了同一行。比如这行代码:
CIK_Entry = Entry(window).grid(row=1, column=1)
Tkinter的grid()方法返回的是None,所以CIK_Entry变量实际存储的不是Entry组件的实例,而是None。当你在get_entries()函数里调用CIK_Entry.get()时,自然就会报错——None类型没有get方法。
Combobox组件的问题也是一样的,Filing_Entry = Combobox(...).grid(...)同样把变量赋值成了None。
修复后的完整代码
只需要把组件创建和布局拆分到两行,先实例化组件,再调用grid方法,就能解决这个问题:
from tkinter import Tk, Label, Entry, Button from tkinter.ttk import Combobox window = Tk() window.title('SEC Scraper') # 创建标题 Header = Label(text="Filing Data Collection") Header.grid(row=0, column=0) # 文本输入框 CIK_Label = Label(text="CIK Number: ") CIK_Label.grid(row=1, column=0) CIK_Entry = Entry(window) CIK_Entry.grid(row=1, column=1) As_of_Date_Label = Label(text="Filings as of (YYYYMMDD format): ") As_of_Date_Label.grid(row=1, column=2) As_of_Date_Entry = Entry(window) As_of_Date_Entry.grid(row=1, column=3) Number_of_filings_Label = Label(text="Number of Filings: ") Number_of_filings_Label.grid(row=1, column=4) Number_of_filings_Entry = Entry(window) Number_of_filings_Entry.grid(row=1, column=5) Filing_Type_Label = Label(text="Filing Type: ") Filing_Type_Label.grid(row=1, column=6) # 申报类型下拉菜单 Filing_choices = ['10-K', '10-Q', '8-K', 'S-8', 'S-1', '10-K/A', '10-Q/A', '8-K/A', 'S-8/A', 'S-1/A'] Filing_Entry = Combobox(window, width=10, values=Filing_choices) Filing_Entry.grid(row=1, column=7) def get_entries(): CIK = CIK_Entry.get() As_of_Date = As_of_Date_Entry.get() Number_of_filings = Number_of_filings_Entry.get() Filing = Filing_Entry.get() # 可以在这里添加打印或存储逻辑,比如: print(f"CIK: {CIK}, Date: {As_of_Date}, Filings: {Number_of_filings}, Type: {Filing}") Enter_Button = Button(window, text="Enter", command=get_entries) Enter_Button.grid(row=1, column=8) window.mainloop()
额外小提示
- 别忘了导入
ttk.Combobox,你的原始代码里可能漏了这个导入(我已经在修复后的代码里加上了) - 可以给输入框添加验证逻辑,比如确保CIK是数字、日期符合YYYYMMDD格式,避免无效输入
- 如果需要长期管理这些界面元素,用类来封装会让代码更整洁、易维护
内容的提问来源于stack exchange,提问作者Tyler Barrett
相关产品推荐
相关产品推荐

