[PyGtk] Splash para aplicación

Marco Antonio Islas Cruz markuz en islascruz.org
Lun Mayo 19 17:22:44 CEST 2008


Facil,

     1. Ejecutas tu aplicacion
     2. Creas el splash screen y al mostrarlo ejecutas lo que va a hacer
        que inicie tu ventana principal.
     3. En el codigo de tu ventana principal preocupate por no bloquear
        el ciclo principal de GTK, con un ciclo while puedes bloquearlo,
        recuerda que estas en un solo hilo y solo un proceso de tu
        aplicacion se ejecuta a la vez.
             1. Puedes valerte de gobject.idle_add para ejecutar una
                funcion cada que no tenga que hacer nada gtk.
             2. Puedes utilizar un thread para hacer la parte pesada,
                siempre y cuando no tenga nada que ver con GTK+ puesto
                que Gtk solo debe ser manejado en un solo hilo.

Esto es algo asi que tendras 2 procesos corriendo al mismo tiempo, uno
que te entretenga al cliente y otro que te inicialice la aplicacion. Si
la parte pesada de tu aplicacion es algo con una lista o cosas asi, te
recomiendo que uses gobject.idle_add en lugar de threads.

Saludos.

On Mon, 2008-05-19 at 10:03 +0200, Ángel Guzmán Maeso wrote:
> Hola, estoy empezando con python y estoy asombrado con su potencial.
> 
> Estoy tratando de hacer una aplicación ayudándome de PyGtk y necesito que
> tenga un splash. Googleando he encontrado muy poca información al respecto,
> solo un par de blogs que explicaban muy por encima con wxwidget y con Gtk
> puro.
> 
> Con las lineas de Gtk me he peleado y he conseguido hacer algo como lo
> siguiente:
> 
> ---
> 
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
> 
> import pygtk
> pygtk.require('2.0')
> import gtk
> import gobject
> 
> class Splash:
>     def start(self):
>         print "Creando SPLASH..."
>         self.v=gtk.Window(gtk.WINDOW_TOPLEVEL)
>         self.v.set_position(gtk.WIN_POS_CENTER)
>         self.v.set_modal(True)
>         self.v.set_size_request(150,100)
>         self.v.set_title('MiAplicación')
>         self.v.AppPaintable=True
> 
>         image = gtk.Image()
>         image.set_from_file("logo.gif")
> 
>         box=gtk.VBox()
>         box.pack_start(image,False,False, 0)
>         self.v.add(box)
>         image.show()
>         box.show()
> 
>         label = gtk.Label("MiAplicación 0.0.0.1")
>         box.pack_start(label,True,False, 0)
>         label.show()
> 
>         self.v.show()
>         self.timeout=gobject.timeout_add(5000, self.AutoClose)
> 
>         #MiAplicacion()
>         #self.AutoClose()
> 
>     def AutoClose(self):
>         self.v.destroy()
>         return False
> 
> class MiAplicacion:
> 
>     def __init__(self):
>         window = gtk.Window(gtk.WINDOW_TOPLEVEL)
> 
>         # Muchas operaciones
>         # Carga de BD
>         # Carga de interfaces
>         # etc
>         # Para simularlo, nada como un gran bucle de 10 millones
>         print "Empezando bucle"
>         i=1
>         while i<10000000:
>             i=i+1
> 
>         print "Bucle terminado"
>         window.show()
> 
> 
> 
> def main():
>     gtk.main()
> 
> 
> if __name__ == "__main__":
>     print "Cargando GUI ..."
>     s=Splash().start()
>     print "Cargando aplicación"
>     Miaplicacion()
>     main()
> 
> ---
> 
> El problema es que el splash se lanza, pero solo cuando se ha cargado todo
> el proceso de la aplicación, por lo tanto, no
> hace su principal objetivo, que es permanecer hasta que la aplicación se
> cargue.
> En el código he probado a lanzar la clase de la aplicación desde dentro del
> splash y que se cerrara con un timeout o
> cuando la clase de la aplicación se terminara de cargar.
> 
> Debe estar fallando algo muy simple pero no lo veo. Tampoco tengo
> referencias de ninguna aplicación de código libre
> que este programada con PyGtk y use un Splash, por lo que no he podido mirar
> nada y aprender de ella.
> 
> Otro problema que tengo, es que no se como quitar las demás partes de la
> ventana (titulo, y botones de maximizar, minimizar y cerrar) de
> la ventana del splash.
> 
> Cualquier comentario es bienvenido.
> 
> Saludos.
> 
> 
-- 
<--Linux... Because I'm Free-->
Marco Antonio Islas Cruz
"Markuz"
Linux User #280229
markuz en islascruz.org
markuz en unixmexico.org
markuz en linuxpozarica.com
marco.islas en gmail.com
islacruz en yahoo.com
http://www.islascruz.org
http://sourceforge.net/projects/gpkg/
http://www.linuxpozarica.com
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/python-es/attachments/20080519/29951273/attachment.pgp>
------------ 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