Seite 1 von 1

Tkinter Threads Animation

Verfasst: Donnerstag 5. Januar 2006, 20:15
von ilja
Hallo!

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?

Verfasst: Montag 9. Januar 2006, 10:35
von mr.hide
Hi,

also bei mir läuft dein Programm problemlos, ohne den von dir beschriebenen Fehler.

Ich hab mit TK noch nicht viel gemacht.
Aber gibt es vielleicht einen Refresh Befehl oder ähnliches womit du das Fenster nach dem Zeichnen manuell neu lädst?

Grüße
Matthias