llamar un evento desde otro con wx

damufo damufo en gmail.com
Mie Jun 18 13:20:24 CEST 2008



Oswaldo Hernández escribiu:
> damufo escribió:
>>
>>
>> Oswaldo Hernández escribiu:
>>> damufo escribió:
>>>> Hola:
>>>> La cuestión es la siguiente, tengo un evento
>>>>
>>>>    def on_btn_abrir_button(self, event):
>>>>        pass
>>>>        event.Skip()
>>>>
>>>>    def on_lst_eventos_leftdclick(self, event):
>>>>        self.on_btn_abrir_button(wx.EVT_BUTTON)
>>>>        event.Skip()
>>>>
>>>> el error que me lanza es
>>>> AttributeError: 'PyEventBinder' object has no attribute 'Skip'
>>>> Alguien sabe que estoy haciendo mal?
>>>> Pienso que el wx.EVT_BUTTON no es correcto pero no se que es lo que 
>>>> tengo que poner.
>>>
>>> Si en 'on_btn_abrir_button' no utilizas niguna propiedad o metodo del 
>>> evento puedes enviarle un None o un False:
>>>
>>> def on_btn_abrir_button(self, event):
>>>     pass
>>>     if event:
>>>         event.Skip()
>>>
>>> def on_lst_eventos_leftdclick(self, event):
>>>     self.on_btn_abrir_button(None)
>>>     event.Skip()
>>>
>>> Personalmente creo que para los casos en que dos eventos realizan la 
>>> misma acción es preferible:
>>>     Crear una tercera funcion que es llamada por las dos funciones de 
>>> evento.
>>>     ó crear una unica funcion de eventos y hacer Bind de los dos 
>>> eventos a la misma funcion
>>>
>>
>> Gracias!, el caso es que eso ya lo probara, los errores que dan son, 
>> None y False, respectivamente.
>>
>> AttributeError: 'NoneType' object has no attribute 'Skip'
>>
>> AttributeError: 'bool' object has no attribute 'Skip'
>>
> 
> Si te fijas en lo que he enviado, antes de hacer el skip se comprueba 
> event para evitar el error.
> 
>> He probado otra cosa que no da error y es conectar (no se si se dice 
>> así) directamente el evento de la list con el botón de abrir
>>
>>         self.lst_eventos.Bind(wx.EVT_LEFT_DCLICK,
>>               self.on_btn_abrir_button)
>>
>>
>> Cuento un poco de que va la cosa. Tengo un a lista en la se selecciona 
>> una fila y despues, al pulsar sobre el botón "abrir" este habre otra 
>> ventana en la que muestra la información de la fila seleccionada. Lo 
>> que quería es que exista la posibilidad de que con un doble clic sobre 
>> la fila se abra directamente la ventana.
>>
>> No se si es esta la forma correca de hacerlo?
>>
> 
> Esa es la segunda posibilidad que te daba, y funciona correctamente 
> siempre y cuando no utilices en la funcion las propiedades de event, ya 
> que segun quien lo genere será un evento tipo EVT_BUTTON o 
> EVT_LEFT_DCLICK y tienen metodos distitos.
> 

Perdona Oswaldo, me acabo de dar un par de collejas por ser tan cazurro.
En fin... que no me había fijado... efectivamente tal como indicas, 
funciona! como en principio no usaré event (de momento no se ni como ni 
para que usarlo) usaré la segunda forma la de ponerlo directamente en el 
bind, me parece mas sencillo.

Muchas gracias! ;-)
------------ 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