2017-04-13 6 views
1

Ich versuche, einen Kreis in Tkinter zu machen, die Farben ändern, nachdem das Fenster initiiert wurde. Ich habe at this Frage angesehen, und ich weiß, wie man die Farben ändert, nachdem man die Variable festgesetzt hat. Ich versuche eine Ampel zu machen (ähnlich wie die Person in der Frage, die ich angeschaut habe), aber ich kann die Farbänderung nicht aktualisieren, nachdem der Bildschirm erscheint. Dies ist, was ich bisherÄndern Sie die Farbe eines Objekts, nachdem tkinter initiiert wurde

root = tk.Tk() 
canvas = tk.Canvas(root) 
light_1 = canvas.create_oval(*coordinates here*, fill='green') 
root.mainloop() 

und die Farbe canvas.itemconfig(light_1, fill='blue')

und ich kann nicht nur ein time.sleep(1) tun verwenden zu ändern, weil dann die root.mainloop() nur erreicht nach i der Farbe ändern. Es gibt keine visuelle Rückmeldung davon.

+0

Benutzer die Methode 'root.after (1000, foo)' statt 'time.sleep'? Oder haben Sie einen Knopf, um diese Funktion auszuführen ..? (beachte, dass die Zeit in Millisekunden ist) – arrethra

Antwort

3

Sie können time.sleep() nicht irgendwo in tkinter-Code verwenden, da es die Ausführung des tkinter-Hauptloops blockiert. Die Lösung ist der Code zum tkinter mainloop mit der after Methode hinzufügen:

def change_color(): 
    canvas.itemconfig(light_1, fill='blue') 

root = tk.Tk() 
canvas = tk.Canvas(root) 
light_1 = canvas.create_oval(*coordinates here*, fill='green') 
root.after(1000, change_color) # 'after' uses milliseconds, so 1,000 = 1 second 
root.mainloop() 
+0

Das scheint genau das zu sein, nach dem ich gesucht habe. Ich kann es jetzt nicht testen, aber ich bin sicher, es wird funktionieren! Vielen Dank! – Goalieman

Verwandte Themen