[pyGTK] avance en un progressbar

Rafael Villar Burke pachi en rvburke.com
Mar Oct 28 11:37:13 CET 2008


Milton Galo Patricio Inostroza Aguilera wrote:
> El día 27 de octubre de 2008 13:31, Milton Galo Patricio Inostroza
> Aguilera <minoztro en gmail.com> escribió:
>   
>> Estimados:
>>
>>   Hoy estudiando los generadores me topé con el tema de las
>> progressbar (es un tópico asociado)...entonces me puse manos a la obra
>> para echar a andar una barra de progreso con un generador (cosa que no
>> es muy dificil).
>>     
>
> Buscando por internet encontré otra solución que al parecer también la
> utiliza el modulo de update-manager...la funcion tarea y la
> on_checkbuttonFibonacci_toggled son resumidas a:
>
> 	def on_checkbuttonFibonacci_toggled(self, widget):
> 		self.progressbarTarea.set_text("Leyendo Archivo %s")
> 		for theLine in open("glade/windowTarea.glade"):
> 			self.progressbarTarea.pulse()
> 			for theWord in theLine.split():
> 				for theElement in theWord:
> 					for i in range(500):
> 						print theElement
> 			while gtk.events_pending():
>    				gtk.main_iteration(False)
> 		self.progressbarTarea.set_fraction(1)
> 		self.progressbarTarea.set_text("Tarea completada 100%")	
>
> en donde si se dan cuenta se agrega el siguiente loop:
>
> 			while gtk.events_pending():
>    				gtk.main_iteration(False)
>
> He ejecutado los códigos y al parecer tienen el mismo rendimiento y
> sobrecarga de sistema...ahora cual es la diferencia conceptual entre
> esta aproximación y la otra que utiliza gobject.idle_add?
Milton, como te comenté en el canal #pygtk, esta es la forma "lineal" de
hacerlo. Con ese nuevo bucle while agotas los eventos pendientes de
procesado en el bucle principal y luego, al pasar a la nueva iteración
se actualiza la barra (probablemente sin eventos pendientes y por tanto,
instantáneo).
 En un trabajo en bucle tiene menos sentido esta aproximación, en mi
opinión, pero puede ser interesante si tienes trabajos en secuencia que
van actualizando la barra a medida que se completan. Con esa iteración
en los eventos pendientes te aseguras de que la interfaz se actualice
antes de pasar al siguiente paso.

Saludos,

Rafael Villar Burke
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es