Tkinter Threads Animation

Fragen zu Tkinter.
Antworten
ilja
User
Beiträge: 9
Registriert: Sonntag 23. Oktober 2005, 12:55

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?
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

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
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Antworten