Re: [Python-es] Re: Re: [PyGtk] Splash para aplicación

Arnau Sanchez pyarnau en gmail.com
Mie Mayo 21 20:01:50 CEST 2008


Ángel Guzmán Maeso escribió:
> Me he leído esa FAQ(y toda la lista de FAQ's) y no me ha quedado muy claro,
> ya que en la pagina de Gnome (sobre los generadores)
> viene mucha parte en modo "pseudocódigo" y no lo puedo ver un ejemplo real
> funcionando. 
¿Pseudo-código? supongo que quieres decir que es sólo un fragmento, 
porque lo que aparece en el pygtk-faq es código real.
> Como soy un principiante, aun no entiendo
> muchos conceptos y tampoco he trabajado nunca con hilos (solo tengo algunas
> pequeñas nociones) y menos aun se como trabajan en Python.
>   
"create_app.next" no existe porque "create_app" no es un generador, no 
hace yield en ningún momento y es, por tanto, una función común y 
corriente. No sirve que luego desde dentro llames a un generador (aunque 
hacer de __init__ un generador, uff, duele sólo pensarlo, Python nunca 
te dejará hacer eso). Sea como sea, dos (o más) generadores se pueden 
enlazar así:

def generador1():
    for x in generador2():
       yield x

def generador2():
    yield 1
    yield 2

Pero no es necesario en tu caso, pues podrías organizarlo en un único 
generador:

obj = MiClase()
task = obj.initgen() # obj.initgen es un generador que hace el trabajo 
duro de inicialización
gobject.idle_add(task.next, ...)

¿Por qué pones esos try/except? el gtk.main_quit ya debería llamarse 
automáticamente cuando se produzca una excepción.
>         while i<1000000:
>             i=i+1
>             yield True # #MODIFICADO: Yield, lo traduzco como "producir",
> asi que lo pongo mientras produce el while
>             #if i%10000:
>             #    print i
>
>         yield False # Al terminar dejo de producir, pero no se si el metodo
> def "next" deba llamarse
>         #en el anterior while
>         print "Bucle terminado"
>         self.window.show_all()   # Muestra la ventana (sin tamaño por
> defecto es 200x200)
>   
Todo lo que haya después del "yield False" no se ejecutará nunca, una 
vez has devuelto "False" ese generador pasa a mejor vida. Si tienes algo 
que ejecutar, hazlo antes.

Si esto no te convence, puedes probarlo con threads; será complicado 
pero aprenderás mucho.

arnau

pd: dicho esto, odio con toda mi alma los splash, ¿por qué un programa 
se cree tan importante como para inutilizar, aunque sea temporalmente, 
el escritorio? :-p
_______________________________________________
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