CodeGym /Curso de Java /Python SELF ES /Gestión de eventos al presionar botones

Gestión de eventos al presionar botones

Python SELF ES
Nivel 49 , Lección 4
Disponible

1. Concepto de gestión de eventos

En aplicaciones con interfaz gráfica, la gestión de eventos es el mecanismo principal para la interacción del usuario con el programa. Cuando un usuario presiona un botón, ingresa texto o simplemente mueve el cursor, se generan eventos en la aplicación. Estos eventos pueden ejecutar funciones, cambiar la interfaz e incluso alterar radicalmente el funcionamiento del programa. Imagina que eres un amigo que lanza pizzas al aire con destreza, ¡y cada pizza es un evento que necesitas gestionar mientras está caliente!

Llamada a funciones al presionar botones

Empecemos con algo sencillo: aprender a vincular un botón con una función. La lógica es simple: hacemos un botón, atrapamos el clic y ejecutamos la magia de Python. Para empezar, crearemos una ventana sencilla con algunos botones.


import tkinter as tk

def say_hello():
    print("¡Hola, usuario!")

def count_clicks():
    global count
    count += 1
    print(f"Botón presionado {count} veces.")

# Creamos la ventana principal
root = tk.Tk()
root.title("Gestión de eventos")
root.geometry("300x200")

# Creamos el botón para saludar
hello_button = tk.Button(root, text="Di hola", command=say_hello)
hello_button.pack(pady=10)

# Creamos el contador de clics
count = 0
count_button = tk.Button(root, text="Contar clics", command=count_clicks)
count_button.pack(pady=10)

# Ejecutamos el bucle principal de la aplicación
root.mainloop()

En este ejemplo, al presionar el botón "Di hola", se muestra un mensaje en la consola, y al presionar el botón "Contar clics" se cuenta el número de veces que se ha presionado.

2. Vinculación de eventos con widgets

En Tkinter, los eventos pueden vincularse no solo con botones, sino también con otros widgets como campos de entrada, checkboxes y etiquetas. Esto permite que tus aplicaciones reaccionen a cambios en la interfaz como si fueran chefs experimentados detectando el olor de un pastel quemándose.

Ejemplo: cambiar el color del botón al presionar

Cambiemos nuestro ejemplo para que el botón cambie de color al ser presionado.


def change_color():
    current_color = color_button.cget("bg")
    new_color = "yellow" if current_color == "red" else "red"
    color_button.config(bg=new_color)

color_button = tk.Button(root, text="Cambiar color", bg="red", command=change_color)
color_button.pack(pady=10)

Ahora, el botón cambiará de color cada vez que se presione. Este es un ejemplo sencillo de cómo se puede demostrar visualmente al usuario que se ha gestionado un evento.

3. Uso práctico de los eventos

Ahora que sabes cómo vincular funciones con eventos, intentemos crear una aplicación más interactiva que reaccione a diversos eventos. Imagina una aplicación con un temporizador que se inicia y detiene al presionar un botón.

Ejemplo de programa con temporizador

Creemos una aplicación donde al presionar un botón se inicie un temporizador que cuente los segundos.


import time

def start_timer():
    global running
    if not running:
        running = True
        count_seconds()

def stop_timer():
    global running
    running = False

def count_seconds():
    if running:
        global seconds
        seconds += 1
        time_label.config(text=f"Segundos transcurridos: {seconds}")
        root.after(1000, count_seconds)

seconds = 0
running = False

start_button = tk.Button(root, text="Iniciar", command=start_timer)
start_button.pack(side="left", padx=10)

stop_button = tk.Button(root, text="Detener", command=stop_timer)
stop_button.pack(side="right", padx=10)

time_label = tk.Label(root, text="Segundos transcurridos: 0")
time_label.pack(pady=20)

root.mainloop()

En este ejemplo, tenemos dos botones: "Iniciar" y "Detener". Presionar "Iniciar" comienza el conteo de tiempo, mientras que "Detener" lo interrumpe. Usamos el método `after` para lanzar la función de conteo cada segundo. Esto permite que no se bloquee el bucle principal de la aplicación y realizar otras tareas.

4. Manejo de errores en la gestión de eventos

A veces los programas pueden comportarse de forma extraña y la causa pueden ser errores en la lógica de gestión de eventos. Por ejemplo, si un clic lleva a un procesamiento incorrecto de datos o provoca efectos no deseados. Es muy importante manejar todas las posibles excepciones y asegurarse de que todas las acciones del usuario se gestionen correctamente.

Ejemplo de manejo de excepciones

Agreguemos manejo de excepciones en nuestro ejemplo del temporizador para evitar problemas, como intentar iniciar el temporizador cuando ya está en marcha.


def start_timer():
    global running
    try:
        if not running:
            running = True
            count_seconds()
    except Exception as e:
        print(f"Error al iniciar el temporizador: {e}")

def stop_timer():
    global running
    try:
        running = False
    except Exception as e:
        print(f"Error al detener el temporizador: {e}")

Ahora, si algo sale mal al iniciar o detener el temporizador, tendremos información detallada sobre el error.

La gestión de eventos es una parte clave en la creación de aplicaciones GUI interactivas. Es algo que permitirá que tu programa responda a las acciones del usuario, haciendo tus aplicaciones más dinámicas y útiles. Hemos creado algunos ejemplos que muestran cómo vincular eventos con funciones, cambiar la interfaz y reaccionar ante las acciones del usuario. Si dominas esto, el script será tu amigo, y los bugs —enemigos olvidados desde hace mucho tiempo.

1
Опрос
Creando GUI con Tkinter,  49 уровень,  4 лекция
недоступен
Creando GUI con Tkinter
Creando GUI con Tkinter
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION