当我点击此脚本中的按钮时,我收到错误消息
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( )
答案 0 :(得分:2)
看看这一行:
e1 = Entry(root, width=10).grid(row=r, column=1)
在这种情况下,这与:
相同e1 = Entry(root, width=10)
e1 = e1.grid(row=r, column=1)
e1.grid(...)
返回“无”,因此您最终得到e1 = None
。当您在任何地方使用此类作业时,您的列表仅填充None
,因此当您稍后在其上调用... e1.get() ...
时,您会收到该错误。
尝试分离创建对象并在其上调用方法。