2010-12-29 4 views
0

Lorsque je crée une instance de fenêtre tkinter à l'aide d'un thread, même si la fenêtre est détruite après l'exécution et que le thread est joint; Je ne peux pas faire une autre fenêtre tkinter plus tard dans le flux du programme. Pourquoi?L'instance gui thread tkinter arrête toutes les autres spawns

def on_button_click(root): //destroys window on button click 
    root.destroy() 

def init(): //thread calls this 
    root=Tk() 
    b = Button(root, text="OK", command=lambda:on_button_click(root)) 
    b.pack() 
    root.mainloop() 

t = Thread(target=init) 
t.start() 
t.join() 

root=Tk() //program flow halts here with no window being displayed 
root.mainloop() 

Répondre

1

D'après ce que je peux recueillir l'aide de mon Google-foo, le problème est que la boucle d'événements Tk (qui est créé au cours de l'appel à root.mainloop()) est mono-thread et vous ne pouvez avoir une instance à la fois. C'est probablement pourquoi il se bloque à cet endroit. Votre thread configure correctement le sous-système Tk mais le programme échoue lorsque vous essayez de créer un deuxième sous-système Tk à exécuter en même temps. Votre appel à root.destroy() ne fait que détruire les fenêtres que vous avez créées et non le sous-système Tk entier.

Cela fait longtemps que j'ai utilisé Tk mais je suggère d'appeler root.mainloop() une fois lorsque vous démarrez votre programme, puis laissez vos fonctions pour instancier uniquement les fenêtres Tk, pas tout le sous-système Tk.

Questions connexes