Когда я нажал на кнопку в этом сценарии я получаю сообщение об ошибке говорящееИзвлечение данных из записи
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» - «Нет», поэтому все, что вам нужно сделать, это найти место, где, по вашему мнению, вы его определяете, и проверить, делает ли код то, что, по вашему мнению, он делает. –