UpdateData(False) ??

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
a4
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2006, 14:07

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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()``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
a4
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2006, 14:07

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()"
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
a4
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2006, 14:07

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)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
a4
User
Beiträge: 4
Registriert: Donnerstag 29. Juni 2006, 14:07

meine fragen sind damit beantwortet,
vielen dank!
Antworten