Habe folgendes Programm als Beispiel für ein Problem mit Threads in Zusammenhang mit Tinter:
Code: Alles auswählen
from time import *
from thread import *
from Tkinter import *
from Canvas import *
import sys
# Programm-Ende
def ende():
print "bye bye"
sys.exit(0)
# Funktion fuer Thread der alle 1,5 Sekunden etwas auf die Standartausgabe ausgibt
def show():
print "Start Thread"
for i in range(20):
print "i:", i , "Time:" , time(), "ThreadID:", get_ident()
sleep(1.5)
print "Ende Thread"
return
# Funktion zum Zeichnen einer Linie
def draw_line():
for i in range(10):
l = Line(cv, 20 * i, 80, 90, 100, fill="#000000")
#cv.update()
sleep(1)
return
################## Tkinter ###################
# Hauptfenster erzeugen
hauptfenster = Tk()
# Canvas erzeugen
cv = Canvas(hauptfenster, width = 200, height=170)
cv.pack()
# Knopf
bende = Button(cv, text = "Ende" , command = ende)
wende = Window(cv, 200, 170, anchor="se" , window = bende)
start_new_thread(draw_line,())
print "Ende Hauptprogramm", "ThreadID:", get_ident()
start_new_thread(show,())
hauptfenster.mainloop()
Frage:
Warum läuft die Animation nicht in einem durch (so wie es eigentlich sein soll), wenn die Methode draw_line() in eigenen Thread läuft, sondern immer nur dann, wenn der Mauspfeil sich bewegt, nachdem das Fenster der Animation aktiviert wurde?
Was gibt es bei Tkinter im Zusammenhang mit Threads für Besonderheiten?