.NET

Hernán MF hernan en orgmf.com.ar
Jue Ene 19 13:55:32 CET 2006


> Me puede alguien aclarar una duda sobre el funcionamiento de los
> delegados en Python .NET Pues, en IronPython lo hacía de la siguiente
> forma:
>
> def handler(*args):
>    print "OK"
>
> b=mi_forma.mi_boton
> b.Click += handler
>
> En Python .NET sigo el ejemplo del tutorial:
>  #instantiate a delegate
> d = AssemblyLoadEventHandler(handler)
>
> # use it as an event handler
> AppDomain.CurrentDomain.AssemblyLoad += d
>
> En ningún sitio no veo como asignarle el delegado al objeto grafico.
> Puedo encontrar algunos ejemplos de uso, porque el manual es muy
> pobre.

Lo que muestra el tutorial de Python.NET es un
ejemplo de la sintaxis de eventos y delegados.
Vale para cualquier tipo de eventos y en este caso
especifico lo que muestra es como colgarse del evento que
se dispara cuando .NET carga un ensamblado.

En fin, que es igual a que si lo hicieras en IronPython
o en C#.

   >>> from CLR.System.Windows.Forms import Button
   >>> def f(*args):
   ...     print "clic"
   ...
   >>> b = Button()
   >>> b.Click+=f
   >>> e = CLR.System.EventArgs()
   >>> b.OnClick(e)
   clic
   >>>

Las dos últimas llamadas las puse para imitar el clic de
un boton.  En tu aplicación real no hacen falta.

Yo te recomendaría que usaras la documentación oficial
de .NET y traducir mentalmente el código C# de ejemplo
por el de Python.  No creas que es una deficiencia
de la doc de Python.NET solamente.  Por ejemplo, en
la doc oficial de Microsoft sobre el evento AssemblyLoad
encontrarás ejemplos de código en C#, VBasic y C++ pero
no de JScript (y este último *también* es un lenguaje
.NET de Microsoft.)

También te podrían ayudar los tests de regresión de
Python.NET (están instalados bajo el directorio src\tests)
que te servirían para ver las equivalencias entre las
construcciones en Python.NET y C#

-H.




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