[pyar] problema con sleep

Augusto Roccasalva coyotevz en gmail.com
Vie Feb 4 15:48:06 ART 2011


El día Fri, 4 Feb 2011 09:30:47 -0300
Esteban Alejandro Chauque <achauque en gmail.com> escribió:

> Buen día, tengo el siguiente código que al parecer no esta actuando de
> forma adecuada. Aplica siempre el time.sleep, sin importar la
> condición de y > 5. Yo necesito mostrar los 5 primeros resultados y
> luego los próximos 5 y así sucesivamente hasta terminar de recorrer el
> array, pero me realiza todas las esperas y al final me muestra los
> últimos resultados
> Alguien se le ocurre que puede estar mal?
> 
>     def charge_list_info (self, data=None):
>         self.my.setString("spTableroOnLine")
>         self.arrInfo = self.my.dbData2Lists()
>         y = 1
>         for data in self.arrInfo:
>             self.builder.get_object('lblMq%s'%y).set_label(data[2])
>             self.builder.get_object('lblInf%s'%y).set_label(data[3] +
> ' ' + data[4] + chr(13) + data[10])
>             y = y + 1
>             if y > 5:
>                 y = 1
>                 time.sleep(2)
> 

Deberías dejar que el main loop de gtk "re-dibuje" los labels que acabas de
modificar.
En principio si le agregas antes del sleep() un bucle que verifique los eventos
pendientes y los ejecute debería funcionar.
De todas maneras como te dice Joaquín no es buena idea meter un sleep() en una
aplicación manejada por eventos, la aplicación se bloquea mientras se ejecuta la
funcion sleep() y le quitas la posibilidad a otros eventos (como en este caso
"re-dibujar" los labels) que se ejecuten.
Revisá la documentación de funciones como glib.timeout_add(), glib.io_add_watch
(), glib.idle_add().

El bloque quedaría así:

    if y > 5:
        y = 1
        while gtk.events_pending():
            gtk.main_iteration()
        time.sleep(2)

Saludos
--Augusto



More information about the pyar mailing list