Tkinter e linha. sem espaço na pilha (loop infinito?)
Estou experimentando o Tkinter e o mecanismo de threads. Alguém pode explicar por que isso gera a exceção:
<class '_tkinter.TclError'> out of stack space (infinite loop?)
e como posso resolver isso? Abaixo está o código. BTW, eu sei que algumas pessoas sugerem usar o módulo de encadeamento em vez de encadeamento, mas por enquanto eu gostaria de usar o módulo de encadeamento que é mais simples apenas para me apresentar ao mecanismo.
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()
Obrigado Luca
EDITAR
Eu resolvi substituir
n = 0
while 1:
n += 1
cont.insert('end', str(n)+"\n")
time.sleep(1)
com
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)
e chamando
main_thread(root)
ao invés de
thread.start_new_thread(main_thread, (root,))