Ткинтер и нить. вне стекового пространства (бесконечный цикл?)
Я экспериментирую с Tkinter и механизмом потоков. Может кто-нибудь объяснить, почему это вызывает исключение:
<class '_tkinter.TclError'> out of stack space (infinite loop?)
и как я могу решить это? Ниже приведен код. Кстати, я знаю, что некоторые люди предлагают использовать модуль потоков вместо потоков, но сейчас я хотел бы использовать модуль потоков, который проще представить себе механизм.
from Tkinter import *
import thread
import time
def main_thread(master):
try:
frame = Frame(master)
frame.pack(side='bottom')
scrollbar = Scrollbar(master)
scrollbar.pack(side='right',fill='y')
t = "Title"
title = StringVar()
title.set(t)
ttl = Label(master, textvariable=title, font=("Helvetica", 18))
ttl.pack(side='top')
cont = Text(master, font=("Helvetica",14), yscrollcommand=scrollbar.set)
cont.pack(side='bottom')
button = Button(frame,text="Exit", command=root.destroy)
button.pack(side='bottom')
n = 0
while 1:
n += 1
cont.insert('end', str(n)+"\n")
time.sleep(1)
except Exception as e:
print type(e), e
if __name__ == '__main__':
root = Tk()
root.title("My counting application")
thread.start_new_thread(main_thread, (root,)) # FIXME: out of stack space (infinite loop?)
root.mainloop()
Спасибо лука
РЕДАКТИРОВАТЬ
Я решил заменить
n = 0
while 1:
n += 1
cont.insert('end', str(n)+"\n")
time.sleep(1)
с
n = 0
def do_every_second(n):
cont.insert("end", str(n) + "\n")
n += 1
master.after(1000, do_every_second, n)
do_every_second(n)
и звонит
main_thread(root)
вместо
thread.start_new_thread(main_thread, (root,))