Python 从条目中检索数据

Python 从条目中检索数据,python,tkinter,Python,Tkinter,当我点击这个脚本中的按钮时,我得到一个错误 Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__ return self.func(*args) File "grid_layout.py", line 41, in printout data = [ { l1.cget(

当我点击这个脚本中的按钮时,我得到一个错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
 File "grid_layout.py", line 41, in printout
 data = [ { l1.cget("text"): (e1.get(), e2.get()) } for e1,e2,l1 in zip(E1,E2,L1) ]
AttributeError: 'NoneType' object has no attribute 'get'
我做错了什么

from Tkinter import *
import json


root = Tk(  )

E1 = []
E2 = []
E3 = []
L1 = []

Label(root, text="Way Point").grid(row=0, column=0)
Label(root, text="x").grid(row=0, column=1)
Label(root, text="y").grid(row=0, column=2)
Label(root, text="z").grid(row=0, column=3)

for r in range(1,10):
    l1 = Label(root, text="Number%d" % (r),borderwidth=1).grid(row=r, column=0)
    e1 = Entry(root, width=10).grid(row=r, column=1)
    e2 = Entry(root, width=10).grid(row=r, column=2)
    e3 = Entry(root, width=10).grid(row=r, column=3)
    E1.append(e1)
    E2.append(e2)
    E3.append(e3)
    L1.append(l1)

Label(root, text="zone").grid(row=11, column=0)
Label(root, text="x").grid(row=11, column=1)
Label(root, text="y").grid(row=11, column=2)
Label(root, text="z").grid(row=11, column=3)

for r in range(12,22):
    l2 = Label(root, text="Number%d" % (r-11),borderwidth=1 ).grid(row=r, column=0)
    e4 = Entry(root, width=10).grid(row=r, column=1)
    e5 = Entry(root, width=10).grid(row=r, column=2)
    e6 = Entry(root, width=10).grid(row=r, column=3)

def printout():
 # Iterate over the zip of E & L (joined), building the dict using .cget('text') to get
 # the value of the Tkinter label. Add the { 'c':3.0 } to the end of the resulting list
    data = [ { l1.cget("text"): (e1.get(), e2.get()) } for e1,e2,l1 in zip(E1,E2,L1) ]
    print json.dumps(data, sort_keys=True, indent=2)
    with open('data.json', 'w') as outfile:
        json.dump(data, outfile, sort_keys=True, indent=2)

plus = Button(root,  text='Print', command=printout)
plus.grid(row=23, column=1)

root.mainloop(  )
请看这一行:

e1 = Entry(root, width=10).grid(row=r, column=1)
在这种情况下,其作用与:

e1 = Entry(root, width=10)
e1 = e1.grid(row=r, column=1)
e1.grid(…)
返回None,因此最终得到
e1=None
。当您在任何地方都使用这种分配时,您的列表中只填充了
None
,因此当您稍后调用
。。。e1.get()…
在它们上,您将得到该错误


尝试将创建对象和调用对象上的方法分开。

您关于两者相同的评论显然是错误的。正如你在后面的回答中所描述的,它们肯定不一样。我认为您需要重新表述“这与:”这是一样的,以便更准确。@BryanOakley-尝试重新表述一下。错误消息准确地告诉您出了什么问题——错误消息中是否有您不理解的地方?它告诉您,
e1
是None,因此您需要做的就是找到您认为正在定义它的位置,并检查代码是否正在执行您认为它正在执行的操作。