Seite 1 von 1

UpdateData(False) ??

Verfasst: Montag 5. Februar 2007, 14:04
von a4
hallo,

ich suche eine Funktion zum aktualisieren der Ansicht.
(In VC++ wäre es das UpdateData(True).)

Ich hab es mit "self.window.show_all()" versucht, aber es scheint nicht das selbe zu sein.

Hintergrund:
Ich versuch gerade "threading" zu verstehen und bastel mir dazu ein
kl. Beispielfenster, 2 Labels, der eine zählt hoch, der andere zählt zeitgleich
in einem Thread runter. (10 sec lang mit time.sleep(1))
in der schleife lass ich jedesmal das label neu beschriften mit "label.set_text"
aber aktualisiert wird die ansicht erst nach beendigung der schleife.
da steht also im label "0" und nach ablauf von 10 sec dann "10", aber
die dazwischenliegenden zahlen seh ich leider nicht :-(

bitte helft mir da mal endlich durchzusehen.
mfg:a4

Verfasst: Montag 5. Februar 2007, 18:10
von Leonidas
Hallo a4, willkommen im Forum!

In PyGTK-Programmen benutzt man in der Regel keine Threads, sondern lässt PyGTK das übernehmen, mit ``gobject.idle_add()`` und in deinem Fall sogar passender ``gobject.timeout_add()``.

thx gesagt

Verfasst: Montag 5. Februar 2007, 19:09
von a4
vielen dank für die info
da war ich ja ganz falsch unterwegs^^
ich spiel ein wenig mit der neuen info - thx

eine frage:
du schreibst das man "in der regel" keine threads dazu benutzt,
es geht eigentlich darum: slider (von einem player) innerhalb einer
UI aktualisieren, nehm ich da besser das "threading" modul,
oder löse ich das besser auch mit "gobject.timeout_add()"

Verfasst: Montag 5. Februar 2007, 20:16
von rayo
Hi

Da ich GTK nicht kenne nehme ich mal an gobject.timeout_add() führt eine Funktion regelmässig aus.

Also überlicherweise läuft ja der Player (der die Datei abspielt) in einem eigenen Thread (Threading-Modul) und die GUI z.B. im Hauptthread.

Dann kannst du dort z.B. jede 100ms eine Funktion aufrufen, die den aktuellen Wert beim Player ausliest und dem Slider setzt.

Der Player läuft unabhängig davon im eigenen Thread (mit dem Threading-Modul) und weiss nichts von der GUI.

Gruss

hmm

Verfasst: Montag 5. Februar 2007, 22:48
von a4
der player an sich funktioniert schon super,
ich nehm dazu einen externen player den ich per "popen3(bla)" in
einem eigenen child laufen lasse, dadurch brauchte
ich fuer den player nicht selber einen thread zu erstellen.

in diesem player-child kann ich nun den status (fuer den slider)
auslesen. das wollt ich in einem eigenen thread machen.

jetzt ist meine ueberlegung also ob ich fuer die slideraktualisierung
einen thread (threading modul) nehme oder es mit dem von
Leonidas vorgeschlagenen `gobject.idle_add()`` mache.

was waere denn der "bessere" weg, und warum?

(anbei nochmal der hinweis auf mein oben beschriebenes updateView problem beim threading)

Verfasst: Dienstag 6. Februar 2007, 06:41
von rayo
Hi

Diese Sachen lässt du am besten von gobject.idle_add oder gobject.timeout_add erledigen. Dann holt er die Werte immer wieder und wenn er gerade nichts zu tun hat wird er automatisch die Ansicht aktualisieren.

Gruss

Verfasst: Dienstag 6. Februar 2007, 10:05
von a4
meine fragen sind damit beantwortet,
vielen dank!