Ich schreibe, während ein Programm läuft, Informationen mit .AppendText() in ein TextCtrl.
Leider sieht man die Ausgaben erst, nachdem das Programm zuende gelaufen ist.
Gibt es eine Art flush() oder sowas?
TextCtrl flush?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Jens!jens hat geschrieben:Leider sieht man die Ausgaben erst, nachdem das Programm zuende gelaufen ist.
Probier mal Refresh() oder Update().
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hm. So einfach scheint es nicht zu sein. Mir ist aber aufgefallen, das die ganze GUI nicht bedienbar ist.
Kann es ein, das ich da generell etwas falsch mache? Hab ja ehr weniger mit GUIs zu tun.
Also es ist so: Ich möchte in ein TextCtrl schreiben, zu dem Zeitpunkt, bei der ein Event (Drücken auf den "start" Button) abgearbeitet wird.
Mache ich da evtl. besser ein "Fortschritts-Fenster" mit einem TextCtrl auf?
Kann es ein, das ich da generell etwas falsch mache? Hab ja ehr weniger mit GUIs zu tun.
Also es ist so: Ich möchte in ein TextCtrl schreiben, zu dem Zeitpunkt, bei der ein Event (Drücken auf den "start" Button) abgearbeitet wird.
Mache ich da evtl. besser ein "Fortschritts-Fenster" mit einem TextCtrl auf?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Jens!jens hat geschrieben:Hm. So einfach scheint es nicht zu sein. Mir ist aber aufgefallen, das die ganze GUI nicht bedienbar ist.
Das wird jetzt ein Kulturschock für dich. Gerade dann, wenn du noch nichts mit wxPython gemacht hast und an die Konsolenprogrammierung gewöhnt bist.
Es gibt den Hauptthread. In diesem läuft eine Schleife (MainLoop) die ständig prüft ob es neue Events gibt die abgearbeitet werden müssen. Dazu gehört auch der Aufbau der GUI. Dieser Thread darf nie schlafen gelegt (z.B. mit time.sleep()), oder zur Verrichtung langwieriger anderer Arbeit herangezogen werden. Wenn dieser Thread an irgendeiner Stelle unterbrochen wird, dann wird die GUI nicht neu gezeichnet und auch nicht auf irgendwelche Events reagiert.
Deshalb lässt man "Arbeit" von anderen Threads erledigen.
Wichtig ist dabei nur eines: Greife niemals von einem anderen Thread aus auf etwas zu, was die GUI beeinflussen könnte. Z.B. darfst du nicht von einem anderen Thread aus, direkt etwas in ein wx.StaticText-Widget schreiben. Du brauchst immer einen Vermittler zwischen den Threads.
Der einfachste Vermittler heißt wx.CallAfter(). wx.CallAfter setzt zur Übermittlung Events ein. Aber das ist hier nicht so wichtig.
Leider kann ich dich nicht auf einen einzelnen Beitrag verweisen. Deshalb hier die Themen:
- http://www.python-forum.de/topic-5757.html
- http://www.python-forum.de/topic-7742.html
- http://www.python-forum.de/topic-8609.html
- http://www.python-forum.de/post-49728.html (suche nach "Threading")
- http://www.python-forum.de/topic-10770.html
Ich weiß, das ist ziemlich viel.

Wenn du noch Fragen hast, einfach fragen.
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Außerdem würde ich Dir davon abraten - es sei denn Du möchtest Den Nutzern Deines Programs auf diese Weise Detailinformation über den Fortschritt zeigen.jens hat geschrieben: Mache ich da evtl. besser ein "Fortschritts-Fenster" mit einem TextCtrl auf?
Ansonsten geht eine eigentliche Fortschrittsanzeige mit
ProgressDialog oder Gauge (= progress bar)
und Du hast noch
- Ticker,
- Throbber,
- und u. U. auch die Statusbar.
Ggf. kann man natürlich auch andere Widgets als Fortschrittsanzeige "mißbrauchen", aber ich hoffe ich habe jetzt alle gängigen erwischt.
Gruß,
Christian
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@gerold: Danke für die Info's und die Links... Die werde ich mir mal näher ansehen...

Muß ich für ein separates Fortschrittfenster auch einen seperaten Thread aufmachen?
GUI Programmierung ist ja wieder eine Welt für sich. Dabei wollte ich nur was kleines machen
Doch genau das möchte ich. Es werden Dateien verschoben, aber ich möchte das der Anwender nachvollziehen kann, welche Datei wohin gelandet istCM hat geschrieben:Außerdem würde ich Dir davon abraten - es sei denn Du möchtest Den Nutzern Deines Programs auf diese Weise Detailinformation über den Fortschritt zeigen.jens hat geschrieben:Mache ich da evtl. besser ein "Fortschritts-Fenster" mit einem TextCtrl auf?

Muß ich für ein separates Fortschrittfenster auch einen seperaten Thread aufmachen?
GUI Programmierung ist ja wieder eine Welt für sich. Dabei wollte ich nur was kleines machen

- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Jens!jens hat geschrieben:Muß ich für ein separates Fortschrittfenster auch einen seperaten Thread aufmachen?
Ein Fenster ist teil der GUI. Deshalb bleibt das Fenster im Hauptthread. Nur der Job, der die Daten liefert, der muss in einen neuen Thread.
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.