Python para pensadores

Taller diseñado con el corazón de un docente y la mente de un programador
Tema: tkinter (widgets: Label, Entry, Text, Button)

Objetivo de aprendizaje

Desarrollar una aplicación GUI funcional utilizando Python y tkinter, integrando los widgets Label, Entry, Text y Button, para resolver problemas del contexto estudiantil ecuatoriano, mediante la experimentación directa con código, análisis crítico de resultados y la aplicación de principios de diseño de interfaces, fomentando la curiosidad técnica, la colaboración y la ética en el desarrollo de software.

Contextualización: De la consola a la interfaz humana

Imagina por un momento que necesitas crear un sistema para organizar los gastos de tu emprendimiento escolar, o quizás una aplicación para calcular tus promedios de manera visual, o incluso un pequeño programa para gestionar las tareas de tu equipo de trabajo. Hasta ahora, probablemente has interactuado con programas que muestran texto en una consola negra, pero ¿cómo dar el salto para crear aplicaciones con botones, campos de texto y etiquetas como las que usas cada día en tu celular?

La programación de interfaces gráficas no es solo cuestión de estética; es sobre humanizar la tecnología, hacerla accesible, intuitiva y cercana a quienes la utilizan. Con tkinter, la biblioteca estándar de Python para interfaces gráficas, puedes comenzar a construir puentes entre la lógica del código y la experiencia humana.

En Ecuador, donde la creatividad y el ingenio son parte de nuestra identidad, aprender a crear interfaces con tkinter te permitirá desarrollar soluciones tecnológicas que respondan a necesidades reales de tu comunidad educativa, tu barrio o tu ciudad. No se trata solo de escribir código, sino de diseñar experiencias.

Desarrollo de la actividad: Construyendo nuestro primer formulario

1. Los cuatro pilares de tkinter

En tkinter, los widgets son los componentes básicos de cualquier interfaz. Hoy trabajaremos con cuatro esenciales:

  • Label: Muestra texto estático o imágenes. Es la voz de tu aplicación.
  • Entry: Permite al usuario ingresar una línea de texto. Es el oído de tu aplicación.
  • Text: Permite ingresar o mostrar múltiples líneas de texto. Es el cuaderno de tu aplicación.
  • Button: Ejecuta una función cuando se hace clic. Es la acción de tu aplicación.

2. Nuestra primera aplicación: Calculadora de promedio

Vamos a crear una aplicación que calcule el promedio de tres notas, algo muy útil en el contexto estudiantil. Observa cuidadosamente cada parte:

import tkinter as tk
from tkinter import messagebox

# Función que se ejecutará al hacer clic en el botón
def calcular_promedio():
    try:
        # Obtener los valores de los campos Entry
        nota1 = float(entry_nota1.get())
        nota2 = float(entry_nota2.get())
        nota3 = float(entry_nota3.get())
        
        # Calcular el promedio
        promedio = (nota1 + nota2 + nota3) / 3
        
        # Mostrar el resultado en el widget Text
        text_resultado.delete("1.0", tk.END)
        text_resultado.insert(tk.END, f"Notas ingresadas: {nota1}, {nota2}, {nota3}\n")
        text_resultado.insert(tk.END, f"Promedio calculado: {promedio:.2f}\n")
        
        # Determinar si aprueba o no
        if promedio >= 7:
            text_resultado.insert(tk.END, "¡Felicidades, has aprobado! 🎉")
        else:
            text_resultado.insert(tk.END, "Necesitas repasar más. ¡Tú puedes! 💪")
    except ValueError:
        messagebox.showerror("Error", "Por favor, ingresa valores numéricos válidos")

# Crear la ventana principal
ventana = tk.Tk()
ventana.title("Calculadora de Promedio")
ventana.geometry("500x500")
ventana.configure(bg="#f0f8ff")

# Crear y colocar los widgets Label
label_titulo = tk.Label(ventana, text="Calculadora de Promedio Escolar", font=("Arial", 16, "bold"), bg="#f0f8ff")
label_titulo.pack(pady=20)

label_nota1 = tk.Label(ventana, text="Nota 1:", bg="#f0f8ff")
label_nota1.pack()
entry_nota1 = tk.Entry(ventana, width=20)
entry_nota1.pack(pady=5)

label_nota2 = tk.Label(ventana, text="Nota 2:", bg="#f0f8ff")
label_nota2.pack()
entry_nota2 = tk.Entry(ventana, width=20)
entry_nota2.pack(pady=5)

label_nota3 = tk.Label(ventana, text="Nota 3:", bg="#f0f8ff")
label_nota3.pack()
entry_nota3 = tk.Entry(ventana, width=20)
entry_nota3.pack(pady=5)

# Crear el botón para calcular
boton_calcular = tk.Button(ventana, text="Calcular Promedio", command=calcular_promedio, bg="#4CAF50", fg="white", font=("Arial", 12))
boton_calcular.pack(pady=20)

# Crear el widget Text para mostrar resultados
text_resultado = tk.Text(ventana, height=8, width=50)
text_resultado.pack(pady=10)

# Ejecutar el bucle principal de la aplicación
ventana.mainloop()

El reto final: Aplicación para emprendedores escolares

En Ecuador, el espíritu emprendedor florece desde las aulas. Tu desafío es crear una aplicación con tkinter que ayude a un estudiante emprendedor a gestionar las ventas de su pequeño negocio escolar (venta de golosinas, manualidades, etc.).

Especificaciones del reto:

La aplicación debe incluir:

  1. Un formulario para registrar productos (nombre, precio, cantidad en inventario)
  2. Un sistema para registrar ventas (producto, cantidad vendida, fecha)
  3. Un área que muestre el inventario actualizado después de cada venta
  4. Un cálculo automático de las ganancias totales
  5. Un botón para generar un "reporte del día" en el widget Text

Requisitos técnicos:

  • Utilizar al menos 4 Labels, 3 Entries, 1 Text y 3 Buttons
  • Manejar errores (por ejemplo, intentar vender más productos de los disponibles)
  • Diseñar una interfaz limpia y amigable
  • Incluir comentarios en el código que expliquen tu lógica

Reflexión adicional: Piensa en cómo tu aplicación podría adaptarse para emprendimientos reales de tu comunidad. ¿Qué funcionalidades adicionales serían útiles? ¿Cómo podrías hacerla más accesible para personas con diferentes niveles de alfabetización digital?

Evaluación lúdica: Demuestra lo aprendido

Responde estas 5 preguntas para verificar tu comprensión de los conceptos de tkinter. ¡Cada respuesta correcta te dará 20 puntos!

Pregunta 1: ¿Qué widget de tkinter se utiliza para mostrar texto estático que el usuario no puede modificar?
Puntuación: 0/100
Pregunta 1/5

¡Quiz completado!