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.
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Problem mit GUI und Thread

Beitragvon Frank aka Ch3ck3r » Freitag 1. Februar 2008, 15:09

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

Beitragvon BlackJack » Freitag 1. Februar 2008, 15:38

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

Beitragvon Leonidas » Freitag 1. Februar 2008, 17:45

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

Beitragvon Frank aka Ch3ck3r » Freitag 1. Februar 2008, 17:55

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

Beitragvon BlackJack » Freitag 1. Februar 2008, 18:11

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:

Beitragvon Frank aka Ch3ck3r » Freitag 1. Februar 2008, 18:32

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder