[pyGTK] avance en un progressbar

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Mar Oct 28 12:28:52 CET 2008


El día 28 de octubre de 2008 7:37, Rafael Villar Burke
<pachi en rvburke.com> escribió:
> 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).

Entiendo, es decir, cuando tenemos una sola función que está
modificando algún elemento gráfico tiene sentido utilizar el
gobject.idle_add

>  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.

Este es el caso en que varias funciones estén modificando el elemento
gráfico por lo tanto tiene sentido lo del bucle while, es como lo hace
el update-manager para ubuntu.

>
> Saludos,
>
> Rafael Villar Burke

Gracias pachi, por tu aporte

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



-- 
Milton Inostroza Aguilera
------------ próxima parte ------------
_______________________________________________
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