Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

30-AGREGUEMOS BOTONES Y LAS FUNCIONES CALL BACKS

Enviado por   •  9 de Julio de 2018  •  1.507 Palabras (7 Páginas)  •  343 Visitas

Página 1 de 7

...

FUNCIONES CALLBACK TIPO LAMBDA

Hemos visto las funciones lamba que se usan para definir pequeñas funciones en una sola linea, también pueden utilizarse como CALLBACK veamos el siguiente ejemplo.

[pic 16]

El código es un poco triquiñuelero ya que dentro de command usa un or en una forma poco ortodoxa, ya que el mismo obligara a que se ejecuten los dos miembros a cada lado del mismo, una forma muy curiosa de forzar la ejecución de ambos miembros.

Por otro lado el miembro stdout.write('xxxx') emula el comando print ya vimos eso, por lo tanto imprimirá el texto y luego saldrá, logrando un efecto similar al del ejemplo anterior.

[pic 17]

Al apretar el botón imprimirá el mensaje y saldrá, en este caso la función lambda sera el callback.

[pic 18]

PASANDO ARGUMENTOS A LA FUNCION LAMBDA

En el ejemplo anterior la función lambda no necesitaba argumentos, pero en el caso de que los necesite, podemos pasarselos y también colocarle argumentos por default como en una función común.

def handler(A, B): # enclosing scope X automatically retained

use A and B...

def makegui( ):

X = 42.

Button(text='ni', command=(lambda: handler(X, 'spam')) )

makegui( )

mainloop( )

Aquí vemos un ejemplo esquemático se crea una función makegui() que contendrá dentro la instanciación en la clase Button y otra función llamada handler() que sera la encargada de ejecutar la acción cuando se apreta el botón o sea la función CALLBACK.

Vemos que se llama a la función makegui(), esta instancia implícitamente en la clase Button y el comando que se ejecutara al apretar el botón es una función lambda que lo que hace es pasarle argumentos a la función handler.

[pic 19]

Por lo tanto se ejecutara al apretar el botón la función handler con los argumentos A=42 y B='spam' que fueron asignados al llamar a la misma.

Luego dentro de la función handler no escribimos código simplemente colocamos use A y B para mostrar cualquier uso que se le pueden dar a las variables que manejamos en general.

Este es el mismo ejemplo usando clases

class Gui:

def handler(self, A, B):

use self, A and B...

def makegui(self):

X = 42.

Button(text='ni', command=(lambda: self.handler(X, 'spam')) )

Gui().makegui( )

mainloop( )

Allí se realiza la instanciación implicita y se llama al método makegui() que realiza el mismo trabajo que antes.

Gui().makegui( )

USANDO METODOS DE UNA CLASE COMO CALLBACK

Veamos el siguiente ejemplo:

[pic 20]

Aquí vemos que definimos una clase HelloClass dentro de ella hay un método constructor que no requiere argumentos asi que podemos instanciar en esta clase solo usando.

HelloClass( )

Al instanciar se llama al método constructor que crea el botón mediante una instanciación a la clase Button, y a la misma en forma correcta luego se le aplica el método pack().

La función callback, se define con command=self.quit lo cual llama al método quit definido dentro de la clase y que imprime el texto y luego sale con sys.exit(), ejecutemoslo desde una consola.

[pic 21]

Al apretar el botón..

[pic 22]

Ahora veamos el mismo ejemplo pero con una instanciación de un objeto.

[pic 23]

Aquí vemos otro ejemplo dentro de la clase HelloCallable hay un método constructor que guarda el mensaje que se va a imprimir al salir en una variable self.msg, y tiene un metodo __call__ que es el que usa Tkinter para llamar a la funcion CALLBACK, asi que al definirlo nuevamente para nuestra clase lo pisaremos y usaremos el nuestro.

O sea que al ejecutar el botón se instanciara en la clase HelloCallable y la llamada a la función __call__ se hará automáticamente reemplazando uno de los métodos usados por Tkinter en nuestra propia clase

En este ultimo ejemplo usaremos cliqueos de diferentes botones para llamar a funciones diferentes.

[pic 24]

El metodo bind() reemplaza a commad pero nos proporciona la posibilidad de capturar el cliqueo en un boton o el otro o ver si se hace doble click y desviar a diferentes funciones, es similar a comand solo que se puede diferenciar el clicqueo del boton derecho del izquierdo y los doble clicks y desviar a diferentes funciones en este caso a hello o a quit.

Bueno eso es todo nos vemos en la parte 31

Ricardo Narvaja

...

Descargar como  txt (9.2 Kb)   pdf (55.1 Kb)   docx (16.5 Kb)  
Leer 6 páginas más »
Disponible sólo en Essays.club