La Programación Orientada a Eventos

Los sistemas operativos visuales interactúan con el usuario a través de interfaces de línea de comandos, interfaces gráficas de usuario y eventos, generados por el usuario o por compononentes enlazados al dispositivo (sensores...).

Estos sistemas operativos permiten la ejecución simultánea de diferentes aplicaciones, aunque sólo una de ellas tiene realmente el foco del teclado, del ratón... Cuando se genera un evento, el sistema operativo se lo comunica a la aplicación que tiene el foco y actua según se haya programado al desarrollar la aplicación.

Las aplicaciones CLI que piden información al usuario, cuando lo hacen se quedan esperando que el sistema operativo le comunique el evento: "El usuario utiliza el teclado para escribir algo y ha pulsado la tecla Return mientras yo tengo el foco" (evento que puede simularse usando el ratón y las funciones copiar y pegar).

Toda aplicación GUI contiene al menos una ventana. En los lenguajes de programación visual se denomina ventana a cualquier rectángulo que pueda ser presentado en la pantalla, sea cual sea su contenido y funcionalidad. Todo son ventanas, tanto las aplicaciones en sí como sus componentes visuales. Cada aplicación tiene su propio bucle de eventos, que actúa sobre la ventana que tiene el foco.

En las aplicaciones visuales de escritorio que desarrollaremos en esta asignatura sólo trataremos cuatro tipos de eventos: generados por el ratón, por el teclado, por el transcurso del tiempo o por acciones que provoquen la reimpresión en pantalla de la aplicación o parte de ella.

Por ejemplo, si se pulsa el botón izquierdo del ratón (configurado para diestros), el sistema operativo lo reconoce como un evento y lo comunica al bucle de eventos de la aplicación. tkinter usa <Button-1> para identificar este evento, permitiendo al desarrollador implementar una acción cuando recibe el aviso de que el evento ha sido lanzado.

Los eventos de ratón actúan directamente sobre el widget al que apunta el cursor, que marca el foco. Los eventos de teclado actúan sobre el widget que tiene el foco, generalmente respondiendo a una orden del estilo de:

widget_asociado.bind(evento, gestor_del_evento)

con que se indica al gestor de eventos de la aplicación, que si el widget_asociado tiene el foco cuando el usuario lanza cierto evento se invoque a la función de nombre gestor_del_evento. Por ejemplo, para que se ejecute la función SeHaPulsadoElBotonAceptar() deberíamos escribir:

boton_aceptar.bind('<Button-1>', SeHaPulsadoElBotonAceptar)

Los botones están pensados para que el usuario haga clic sobre ellos con el ratón, es el comando más utilizado sobre un botón, por lo que uno de los parámetros que podemos usar al crear un botón es decirle qué función debe llamarse cuando lo pulsa el usuario.

Ejemplos

Capturando clicks y pulsaciones de teclas

from tkinter import *

def key(event):
    print("Has pulsado la tecla", repr(event.char))

def callback(event):
    frame.focus_set()
    print("Has hecho click en", event.x, event.y)

root = Tk()

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

Referencias

results matching ""

    No results matching ""