PyGTK y lambda w: actiongroup

Ernesto Revilla erny en sicem.biz
Mie Mayo 11 01:03:39 CEST 2005


Si tienes una clase, lo mejor montas tus métodos concretos de clase:

class MiClase:
    ....
    def funcion1(self,w):
        ...
    def funcion2(self,w):
        ...

    def crearInterfaz(self,....):
        ....
        actiongroup=....   # crear actiongroup
        actiongroup.add_actions=([
                 ('AbrirArchivo', gtk.STOCK_OPEN, '_Abrir un archivo', None, None, lambda w: (self.funcion1, self.funcion2),
         ])
         ....


Si el Actiongroup en pygtk ignora el vacalor de los funciones que llama 
al activar una acción, podrías especificar la acción como tupla:   
lambda w: (self.obtenerArchivo("Juan", self.nombreArchivo), 
self.otraAccion(...))

De lo contrario, puedes hacer una cosa algo más complicada...
justo delante del .add_actions escribes una función temporal dentro de 
la misma función:

    def crearInterfaz(self,....):
        ....
        actiongroup=....   # crear actiongroup
        
        def funcionTemporal(self,w):
            ... # lo que sea aqui

        actiongroup.add_actions=([
                 ('AbrirArchivo', gtk.STOCK_OPEN, '_Abrir un archivo', None, None, lambda w, self=self: funcionTemporal(self,w)),
         ])
         ....

Dado que funcionTemporal no es método ligado a una instancio (Bound 
InstanceMethod), sino simplemente una función, le tenemos que dar la 
instanstancia como primer argumento en el momento de invocarla.
Para ello fijo el segundo argumento de la expresión lambda (self=self) 
que obtiene su valor en el momento de evaluar la expresión lambda 
devolviendo una función (sin nombre).

Erny



Alfredo Cañadas escribió:

> El problema es que en la segunda función utilizo datos de la primera: 
> modifico una cosa que uso en la segunda. Y eso con botones (connect y 
> eso) si sé hacerlo, pero no con estos actiongroup y con lambda. Alguna 
> idea?
>
>> From: Ernesto Revilla <erny en sicem.biz>
>> Reply-To: La lista de python en castellano <python-es en aditel.org>
>> To: La lista de python en castellano <python-es en aditel.org>
>> Subject: Re: [Python-es] PyGTK y lambda w: actiongroup
>> Date: Tue, 10 May 2005 18:15:02 +0200
>>
>>
>> Móntate una función para eso. Poner todo eso en un lambda lo hace muy 
>> inlegible.
>>
>> Erny
>>
>>
>> Alfredo Cañadas escribió:
>>
>>>        Saludos a la lista!!
>>>        Tengo un problema para ejecutar un actiongroup. Antes no 
>>> conseguía ejecutarlo, pero gracias a la lista ya lo solucionamos. 
>>> Ahora mi problema es ejecutar 2 funciones de forma secuencial. Tengo:
>>>        Funcion1:
>>>        ('AbrirArchivo', gtk.STOCK_OPEN, '_Abrir un archivo', None, 
>>> None, lambda w:
>>>                 self.obtenerArchivo("Juan", self.nombreArchivo)),
>>>        ('AbrirArchivo2', gtk.STOCK_SAVE, '_Guardar un archivo', 
>>> None, None, lambda w:
>>>                 self.abrirArchivo("Hola", textbuffer, 
>>> self.nombreArchivo.get_text())),
>>>
>>>        Y quiero que se ejecuten de una sola vez. Alguna ayudita?
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en aditel.org
>>> http://listas.aditel.org/listinfo/python-es
>>>
>>
>>
>> -- 
>> =========================================
>>    NO A LAS PATENTES DE SOFTWARE
>>    http://proinnova.hispalinux.es
>> =========================================
>>
>> Ernesto Revilla
>> sicem sl
>> Pol. Ind. Juncaril, c/ Loja Parc. 7 Local 13
>> 18220 Albolote
>> http://www.sicem.biz
>> Tel: 637 716189
>> MSN: aerd en mx3.redestb.es
>> ICQ: 163888521
>>
>>
>>
>> ---
>> avast! Antivirus: Saliente mensaje limpio.
>> Base de datos de Virus (VPS): 0519-1, 10/05/2005
>> Comprobado en: 10/05/2005 18:15:03
>> avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
>> http://www.avast.com
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en aditel.org
>> http://listas.aditel.org/listinfo/python-es
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>


-- 
=========================================
    NO A LAS PATENTES DE SOFTWARE
    http://proinnova.hispalinux.es
=========================================

Ernesto Revilla
sicem sl
Pol. Ind. Juncaril, c/ Loja Parc. 7 Local 13
18220 Albolote
http://www.sicem.biz
Tel: 637 716189
MSN: aerd en mx3.redestb.es
ICQ: 163888521



---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0519-1, 10/05/2005
Comprobado en: 11/05/2005 1:03:40
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com




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