Das ist kein GTK+-Problem, das gilt für alle GUI-Toolkits. Wie sollen auch zwei Threads gleichzeitig zeichnen? Und natürlich kann man auch mit PyGTK Threads verwenden. Man darf aber entweder nur auf mit einem Thread, nämlich dem Thread, in dem die GTK-Hauptschleife ausgeführt wird, zugreifen, was mit `gobject.idle_add()` recht gut geht (was in Tkinter das `after()` wäre) oder man muss mit Locks arbeiten (`gtk.gdk.threads_enter()` und `gtk.gdk.threads_leave()`). Auf jeden Fall muss beim Initialisieren `gobject.threads_init()` aufgerufen werden, greift man mit mehr als einem Thread auf die GUI zu noch `gtk.gdk.threads_init()`.
Aber die Forensuche müsste dazu eigentlich etwas finden.
Sehr komplizierte ProgressBar
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist mit jedem Toolkit so. Tkinter und wxPython sowie PyQt sind nicht besser und die Pseudo-Timer die GTK-bietet wenn man nicht über Threads gehen will können oft ausreichend sein um sich die komplette Thread-Lösung zu sparen.helduel hat geschrieben:time.sleep(x) gibt anderen Threads wieder etwas Luft zum atmen. Allerdings meine ich gelesen zu haben, dass Threads mit GTK so einige Haken haben soll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Uff, das kling ja schon wirklich ziemlich kompliziert Trundle, ich werde mir da denke ich mal einiges was du geschrieben hast durchlesen, hoffe mal ich bekomme es hin, wenn jemandem sowieso langweilig ist, wäre ich echt Dankbar, wenn mir bei den Themen:
gobject.idle_add()
gtk.gdk.threads_enter()
gtk.gdk.threads_leave()
gobject.threads_init()
gtk.gdk.threads_init()
jemand ein bisschen helfen könnte, beziehungsweise ein paar "qualitativ gute" Tutorials oder How to's geben könnte. Kenne mich in dem Thema nämlich noch nicht so wirklich gut aus
Aber schon mal vielen Dank
Dieser Beitrag hat mir nun etwas mehr geholfen
gobject.idle_add()
gtk.gdk.threads_enter()
gtk.gdk.threads_leave()
gobject.threads_init()
gtk.gdk.threads_init()
jemand ein bisschen helfen könnte, beziehungsweise ein paar "qualitativ gute" Tutorials oder How to's geben könnte. Kenne mich in dem Thema nämlich noch nicht so wirklich gut aus
Aber schon mal vielen Dank
Dieser Beitrag hat mir nun etwas mehr geholfen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich persönlich würde ja einfach den Prozess mit ``subprocess.Popen`` starten und einen ``gobject.timeout_add`` machen, das ich an eine Prozedur binde, die die Ausgaben des Subprocesses aus der Pipe liest und die Progressbar aktualisiert. Das ist doch nicht so schwer.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wie lese ich mit subprocess aus der Pipe?
Hab leider momentan nur so die Grundlagen von Python und GTK. Wenn du gerade Zeit hast, wäre es echt super, wenn du mal ein Beispiel mit dem Ping google machen könntest.
Aber schon mal Danke für den Tipp
Oder vllt ein kurtzes "Statement" zu gobject.timeout_add^^
Ich finde nämlich auch in google nicht sooo brauchbare Ergebnisse, die mir erklären könnten, wie ich gobject.timeout_add am besten bei mir verwende
Hab leider momentan nur so die Grundlagen von Python und GTK. Wenn du gerade Zeit hast, wäre es echt super, wenn du mal ein Beispiel mit dem Ping google machen könntest.
Aber schon mal Danke für den Tipp
Oder vllt ein kurtzes "Statement" zu gobject.timeout_add^^
Ich finde nämlich auch in google nicht sooo brauchbare Ergebnisse, die mir erklären könnten, wie ich gobject.timeout_add am besten bei mir verwende
Man könnte natürlich auch `gobject.io_add_watch()` benutzen, Beispiel hier. Aber das wird höchstwahrscheinlich nicht unter Windows funktionieren, weil da `select()` nur mit Sockets und nicht mit Pipes funktioniert und ich mal stark davon ausgehe, dass da `select()` benutzt wird. Außerdem könnte das Programm natürlich hängen, wenn der gestartete Prozess mal weniger als eine Zeile ausgibt.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Lies doch einfach die Dokumentation zu Subprocess, ich werde sie dir wohl kaum vorlesen müssen, oder? Sowohl die Original-Doku hat ein Beispiel, als auch das Wiki und im Forum bist du nicht der erste der Subprocess nutzt.gugugs hat geschrieben:Wie lese ich mit subprocess aus der Pipe?
Hab leider momentan nur so die Grundlagen von Python und GTK. Wenn du gerade Zeit hast, wäre es echt super, wenn du mal ein Beispiel mit dem Ping google machen könntest.
Aber schon mal Danke für den Tipp
Dazu gibt es im PyGTK-Forum massig Beispiele und ehrlich, das ist so simpel, darauf kommt man eigentlich auch selbst.gugugs hat geschrieben:Oder vllt ein kurtzes "Statement" zu gobject.timeout_add^^
Ich finde nämlich auch in google nicht sooo brauchbare Ergebnisse, die mir erklären könnten, wie ich gobject.timeout_add am besten bei mir verwende
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das Beispiel hatte ich im anderen Thread auch schon gebracht Er hat das also schon ...Leonidas hat geschrieben:Lies doch einfach die Dokumentation zu Subprocess, ich werde sie dir wohl kaum vorlesen müssen, oder? Sowohl die Original-Doku hat ein Beispiel, als auch das Wiki und im Forum bist du nicht der erste der Subprocess nutzt.gugugs hat geschrieben:Wie lese ich mit subprocess aus der Pipe?
Hab leider momentan nur so die Grundlagen von Python und GTK. Wenn du gerade Zeit hast, wäre es echt super, wenn du mal ein Beispiel mit dem Ping google machen könntest.
Aber schon mal Danke für den Tipp
Und ich hatte ihm auch schon Beispiele zu Threads rausgesucht ... ok, wenn es eine andere, einfachere Möglichkeit gibt, würde ich mir die natürlich auch zuerst angucken!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie wäre es, wenn Du einfach mal hier postest. Somit könnten später andere User mit ähnlichem Problem Deine Lösung nachvollziehen
http://paste.pocoo.org/
http://paste.pocoo.org/