Problem mit GUI und Thread

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Hi Community.

Ich habe ein leicht verzwicktes Problem.

Ich weiß, ich darf nur aus einem Thread auf die Gui zugreifen. Das Problem das ich nun habe, ist, dass der Inhalt der GUI alle 5 Sekunden aktualisiert werden soll.

Baue ich nun in dem Gui Thread eine while schleife mit time.sleep(5), so wird das Fenster nie angezeigt, da das Programm in der schleife ist und nicht zu MainLoop() kommt.

Baue ich die Schleife hinter MainLoop() gehts natürlich auch nicht, weil da ja davor schon das Main Loop kommt.

Also habe ich einen anderen Thread gestartet und diesem Thread die Instanz der GUI mitgegeben. Der Thread ruft dann alle 5 Sekunden eine Methode der Instanz auf.

Das klappt auch etwa 3 bis 5 mal. Spätestens beim 6. mal geht aber die Gui in die Knie, das Fenster verschwindet und vor allem ohne Fehlermeldung.

Wie kann man das Problem lösen?

Ich habe schon gedacht in der GUI mit einer Queue zu arbeiten, aber das geht ja dann wieder nicht, weil die Gui nicht zum MainLoop() kommt.
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
BlackJack

Für so etwas bieten die meisten GUI-Toolkits Methoden. Tkinter zum Beispiel mit der `after()`-Methode. Bei `wxPython` heisst's glaube ich `CallAfter()`.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

PyGTK hat sogar ``gobject.timeout_add()``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

CallAfter habe ich gefunden, aber das ruft eine Methode auf, nach dem ein Event übergeben wurde. Welches event tritt bitte alle 5 sekunden auf ?
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
BlackJack

Ups, aber der Docstring von `wx.CallAfter()` verweist auf `wx.FutureCall()`, und dessen Doku erwähnt `wx.Timer`. Eines von den beiden hilft Dir hoffentlich weiter.
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

jo der wx.Timer ist ne gute Lösung. Thx, hätte ich wahrscheinlich nicht gefunden
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
Antworten