Seite 1 von 1

Tk Kommunikation mit Threads

Verfasst: Donnerstag 27. November 2014, 16:05
von Herr Lehmann
Hallo,

folgendes Szenario:

Ich habe zwei Funktionen in beiden wird per Popen eine Prozess aufgerufen.

Die erste Funktion läuft ohne Output recht lange und ich würde gerne eine Lade Animation laufen lassen, so lange die Funktion läuft.

z.b. mit

Code: Alles auswählen

Progressbar(self, orient = 'horizontal', length = 200, mode = 'indeterminate')
Ich starte die Funktion in einem Thread mit:

Code: Alles auswählen

def getMeta(self):
        t1=threading.Thread(target=getmetadata, args=(self.fname,))
        t1.start()
        t1.join()
Mein Problem ist, dass die Tk Oberfläche einfriert solange die Funktion läuft. Es sei denn ich lasse das t1.join() weg. Allerdings hat der Nutzer dann keine Möglichkeit in der Gui zu sehen das "etwas passiert".

Die zweite Funktion startet einen Prozess der Werte ausgibt die aussagen, an welchem Punkt der Verarbeitung er sich befindet.
Daher könnte ich eine progressbar erstellen, allerdings weiß ich nicht wie ich den Wert der progressbar aus dem laufenden Prozess kontinuierlich auslesen und an meine Gui senden kann.

Re: Tk Kommunikation mit Threads

Verfasst: Donnerstag 27. November 2014, 16:19
von BlackJack
@Herr Lehmann: Statt das blockierende `join()` zu vewenden könntest von der GUI regelmässig fragen ob der Thread noch läuft/lebt. Ähnlich bei dem Fortschritt. Üblicherweise kommuniziert man mit `Queue.Queue`-Objekten zwischen Threads. Da kannst Du regelmässig den Fortschritt im Arbeiter-Thread reinschreiben und im GUI-Thread regelmässig in der Queue nachsehen ob neue Werte zum Anzeigen vorliegen. Auf GUI-Seite verwendet man die `after()`-Methode ob eine Funktion/Methode zeitverzögert aufrufen zu lassen.

Re: Tk Kommunikation mit Threads

Verfasst: Donnerstag 27. November 2014, 19:19
von Herr Lehmann
Danke das hilft mir allerdings finde ich keine generellen Beispiel Code im netz im es zu implementieren. Hast du da vielleicht was?

Re: Tk Kommunikation mit Threads

Verfasst: Donnerstag 27. November 2014, 22:18
von Herr Lehmann
Hat sich erledigt. Dank der Hinweise hat es geklappt.