Re: [Actux] Question PyGtk |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/actux Archives
]
- To: actux@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [Actux] Question PyGtk
- From: Isabelle <zazooo5@xxxxxxxxx>
- Date: Fri, 25 Jul 2008 11:16:19 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=ZNkxTtQ3eTlBDOziLs82UmGDCAW+TjZDA3xLq+IriCc=; b=tj9u8CldqElxfID3mxihREd2CGeimvNWqlyqSd/oGz09lSmKJDfxVUdQS2HP/mwaVZ rAzzYXhiYbWkvat/ITD7kIcvNqc/EexHr4AXDHA5MN51Bi44jK7B9hzC1615XWaBgYaU dZ4Rwk8idpUrCtSAn31z06GyStWk8xxhUk2b0=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=SgiFiHqNP9ubfAtFRoUeJMyO6KC9/xhrwinu36z/cxvMlR4QzF2OtdnYtLoYNKtKkq Aj7ywKomMMzxZOVz+fEjALwrfRUBUP5HPxbs9fb/Xqd/ppeDrJQ66Re0x59mdfiltsNE 4J26PT6/oKEBoKkXpgmtlYyU+9MU2VDOcNAfo=
Quelques nouvelles!
Juste pour dire que j'ai réussi à faire un splash qui réagit dès qu'un retour de commande apparaît ^^
Bon, je n'ai aucun mérite, on m'a largement aidé, mais quand même, comme quoi c'est possible!
Ci-joint le code fonctionnel (pas très propre mais ça marche ^^), ici, la barre se rafraîchit quand on fait "entrer"
Le principe, c'est d'utiliser les threads (pas étonnant), une boucle à la con pour le rafraîchissement, un readline qui va permettre de détecter les output (c'est ce qu'il me manquait), et une fraction de rafraîchissement égale à 1/nombre de lignes attendues, qui sera déterminé en copiant bêtement les sortie dans un fichier texte puis avec un wc -l sur celui-ci.
Valà ^^
--
ZaZo0o's SpAcE:
http://jstevant.free.frThemes et wallpaper e17:
http://e17artwork.tuxfamily.org
Dites NON à la vente liée:
http://www.racketiciel.infoFinissons-en avec les pièces jointes Microsoft!
http://www.gnu.org/philosophy/no-word-attachments.fr.html
# -*- Encoding: UTF-8 -*-
import pygtk
pygtk.require('2.0')
import gtk, gobject, sys, os
import threading
from time import sleep
class Reader(threading.Thread):
def __init__(self,pbobj):
threading.Thread.__init__(self)
self.pbobj = pbobj
run = True
def run(self):
while self.run:
line = sys.stdin.readline()
print "coin!"
gtk.gdk.threads_enter()
new_val = self.pbobj.progress.get_fraction() + 0.0001
gtk.gdk.threads_leave()
if new_val > 1.0:
new_val = 0.0
self.run = False
# Set the new value
gtk.gdk.threads_enter()
self.pbobj.progress.set_fraction(new_val)
gtk.gdk.threads_leave()
class ProgressBar:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_POPUP)
self.window.set_default_size(320, 200)
self.window.set_position(gtk.WIN_POS_CENTER)
self.progbar()
self.reader = Reader(self)
self.reader.start()
def progbar(self):
self.align = gtk.Alignment(0.5, 0.5, 0, 0)
self.vbox.pack_start(self.align, False, False, 10)
self.progress = gtk.ProgressBar()
self.align.add(self.progress)
self.progress.set_text("program is loading....")
self.progress.set_fraction(0.0)
self.window.show_all()
#self.timer = gobject.timeout_add (1, progress_timeout, self)
def destroy_progress(self,widget,data=None):
self.reader.run = False
reader.join()
gtk.main_quit()
def progress_timeout(pbobj):
print "coin !"
new_val = pbobj.progress.get_fraction() + 0.01
if new_val > 1.0:
new_val = 0.0
# Set the new value
pbobj.progress.set_fraction(new_val)
return True
def main():
gtk.gdk.threads_enter()
gtk.main()
gtk.gdk.threads_leave()
if __name__ == "__main__":
# Initialize threads
gtk.threads_init()
progress = ProgressBar()
# reader = Reader(progress)
# reader.start()
main()