Re: [Actux] Question PyGtk

[ Thread Index | Date Index | More lists.tuxfamily.org/actux Archives ]


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.fr
Themes et wallpaper e17: http://e17artwork.tuxfamily.org
Dites NON à la vente liée: http://www.racketiciel.info
Finissons-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()


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/