У меня есть основной код, который содержит несколько функций, и я проверил его, и он прекрасно работает. Затем я создаю класс для окна tkinter
и тестирую его отдельно, и он также работает нормально. Когда я объединяю их обоих вместе, создавая объект класса внутри функции, я получаю это сообщение об ошибке:
"TclError: can't invoke "frame" command: application has been destroyed"
import tkinter
class InputFromForm():
def __init__(self, root, values):
self.field = []
self.fieldStrings = values
self.temp = self.makeform(self.fieldStrings)
def makeform(self, fields):
entries = []
for i in fields:
row = tkinter.Frame(root)
lab = tkinter.Label(row, width=15, text=i, anchor='w')
ent = tkinter.Entry(row)
ent.insert(tkinter.END, fields[i])
ent.bind("<FocusIn>", lambda event, e=ent: e.selection_range(0, tkinter.END))
row.pack(side=tkinter.TOP, fill=tkinter.X, padx=5, pady=10)
lab.pack(side=tkinter.LEFT)
ent.pack(side=tkinter.RIGHT, expand=tkinter.YES, fill=tkinter.X)
entries.append((i, ent))
return entries
def fetch(self, entries):
for entry in entries:
string = entry[0]
text = entry[1].get()
self.field.append(text)
return self.field
def close(self, root):
root.destroy()
def extractData(dOfValues):
root = tkinter.Tk()
root.title('Test')
userInput = InputFromForm(root, dOfValues)
root.bind('<Return>', (lambda event, e=userInput.temp: userInput.fetch(e)))
b1 = tkinter.Button(root, text='OK',command=(lambda e=userInput.temp: [userInput.fetch(e), userInput.close(root)]))
b1.config(width=25)
b1.pack(anchor=tkinter.CENTER, padx=5, pady=20)
root.mainloop()
if __name__ == '__main__':
dOfValues = {'Customer No.': '',
'PO #':'020202',
'Order Date': '2/3/2012',
'Zip to code':'92182'}
#root = tkinter.Tk()
#root.title('Test')
#userInput = InputFromForm(root, dOfValues)
#root.bind('<Return>', (lambda event, e=userInput.temp: userInput.fetch(e)))
#b1 = tkinter.Button(root, text='OK',command=(lambda e=userInput.temp: [userInput.fetch(e), userInput.close(root)]))
#b1.config(width=25)
#b1.pack(anchor=tkinter.CENTER, padx=5, pady=20)
#root.mainloop()
extractData(dOfValues) # Adding this, creates the error. If I put the code
# from this function into main, it works.
Может кто-нибудь объяснить, что происходит?