Python para pensadores

Taller diseñado con el corazón de un docente y la mente de un programador

Tema: Python-tkinter - Widgets (Listbox, Radiobutton, Checkbutton, Treeview)

Objetivo de aprendizaje

Desarrollar una interfaz gráfica funcional utilizando los widgets esenciales de Tkinter (Listbox, Radiobutton, Checkbutton y Treeview) que permita a los estudiantes aplicar principios de diseño de UI/UX, ejercitar el pensamiento lógico para estructurar datos visualmente, y fomentar la creatividad al resolver problemas de representación de información, con el fin de crear aplicaciones que respondan a necesidades reales de organización y presentación de datos en contextos educativos y comunitarios.

Contextualización

Imagina que eres el coordinador del club de tecnología de tu colegio y necesitas crear un sistema para gestionar los proyectos que los estudiantes van a presentar en la feria científica. Tienes que organizar quiénes participan, qué categorías hay, qué materiales necesitan y el estado de cada proyecto. ¿Cómo representarías toda esta información de forma clara y atractiva?

En la vida cotidiana, constantemente interactuamos con interfaces que nos presentan opciones (como los menús de comida rápida), listas de elementos (como las playlists de música) y datos organizados en tablas (como las calificaciones en el portal estudiantil). Hoy aprenderemos a crear estas mismas experiencias usando Python, conectando la programación con las necesidades reales de organización y presentación de información que enfrentamos como estudiantes y ciudadanos digitales.

Desarrollo de la actividad

Vamos a construir paso a paso una aplicación para gestionar proyectos estudiantiles. Cada widget nos ayudará con una parte específica del sistema:

1. Listbox - Para mostrar la lista de proyectos

El Listbox nos permite mostrar una lista de elementos de los cuales el usuario puede seleccionar uno o varios. Es perfecto para mostrar los nombres de los proyectos registrados.

import tkinter as tk
from tkinter import ttk

# Crear ventana principal
ventana = tk.Tk()
ventana.title("Gestor de Proyectos Estudiantiles")
ventana.geometry("800x600")

# Crear un Listbox para mostrar proyectos
label_proyectos = tk.Label(ventana, text="Proyectos registrados:")
label_proyectos.pack(pady=10)

listbox_proyectos = tk.Listbox(ventana, height=8, selectmode=tk.SINGLE)
listbox_proyectos.pack(pady=5, padx=20, fill=tk.BOTH, expand=True)

# Agregar algunos proyectos de ejemplo
proyectos = ["Robot seguidor de línea", "App para reciclaje", 
             "Sistema de riego automático", "Videojuego educativo",
             "Sistema de seguridad con Arduino"]

for proyecto in proyectos:
    listbox_proyectos.insert(tk.END, proyecto)

ventana.mainloop()

2. Radiobutton - Para seleccionar la categoría del proyecto

Los Radiobutton permiten seleccionar UNA sola opción de un conjunto. Ideal para escoger la categoría del proyecto (Ciencias, Tecnología, Arte, etc.).

# Crear Radiobuttons para categorías
label_categoria = tk.Label(ventana, text="Selecciona la categoría del proyecto:")
label_categoria.pack(pady=10)

# Variable para almacenar la selección
categoria_seleccionada = tk.StringVar(value="Tecnología")

categorias = [("Ciencias", "Ciencias"), 
              ("Tecnología", "Tecnología"),
              ("Arte", "Arte"), 
              ("Sociales", "Sociales")]

for texto, valor in categorias:
    rb = tk.Radiobutton(ventana, text=texto, value=valor, 
                       variable=categoria_seleccionada)
    rb.pack(anchor=tk.W, padx=40)

3. Checkbutton - Para indicar los recursos necesarios

Los Checkbutton permiten seleccionar VARIAS opciones de un conjunto. Perfecto para marcar qué recursos necesita el proyecto (impresión 3D, componentes electrónicos, etc.).

# Crear Checkbuttons para recursos necesarios
label_recursos = tk.Label(ventana, text="Recursos necesarios (puedes seleccionar varios):")
label_recursos.pack(pady=10)

# Variables para cada Checkbutton
necesita_impresion = tk.BooleanVar()
necesita_electronica = tk.BooleanVar()
necesita_programacion = tk.BooleanVar()

cb1 = tk.Checkbutton(ventana, text="Impresión 3D", variable=necesita_impresion)
cb2 = tk.Checkbutton(ventana, text="Componentes electrónicos", variable=necesita_electronica)
cb3 = tk.Checkbutton(ventana, text="Asesoría en programación", variable=necesita_programacion)

cb1.pack(anchor=tk.W, padx=40)
cb2.pack(anchor=tk.W, padx=40)
cb3.pack(anchor=tk.W, padx=40)

4. Treeview - Para mostrar los detalles en formato tabla

El Treeview es un widget poderoso que permite mostrar datos en formato de tabla con filas y columnas. Ideal para presentar un resumen de todos los proyectos con sus detalles.

# Crear un Treeview (tabla) para mostrar el resumen de proyectos
label_resumen = tk.Label(ventana, text="Resumen de proyectos:", font=("Arial", 12, "bold"))
label_resumen.pack(pady=10)

# Crear el Treeview con columnas
tree = ttk.Treeview(ventana, columns=("Proyecto", "Categoría", "Recursos", "Estado"), 
                   show="headings", height=6)

# Configurar las columnas
tree.heading("Proyecto", text="Nombre del Proyecto")
tree.heading("Categoría", text="Categoría")
tree.heading("Recursos", text="Recursos Necesarios")
tree.heading("Estado", text="Estado")

tree.column("Proyecto", width=200)
tree.column("Categoría", width=100)
tree.column("Recursos", width=150)
tree.column("Estado", width=100)

# Insertar algunos datos de ejemplo
tree.insert("", tk.END, values=("Robot seguidor de línea", "Tecnología", 
                                 "Electrónica, Programación", "En progreso"))
tree.insert("", tk.END, values=("App para reciclaje", "Sociales", 
                                 "Programación", "Completado"))

tree.pack(pady=10, padx=20, fill=tk.BOTH, expand=True)

Reflexión: ¿Cómo cambiaría la experiencia del usuario si estos widgets estuvieran en diferentes posiciones? ¿Qué información adicional sería útil mostrar en cada uno? Experimenta cambiando los textos, colores y disposición de los widgets.

El reto final

Tu desafío es crear una aplicación completa para gestionar los participantes de las olimpiadas de programación de tu institución. La aplicación debe incluir:

  1. Un Listbox que muestre la lista de participantes inscritos
  2. Un grupo de Radiobuttons para seleccionar el nivel del participante (Principiante, Intermedio, Avanzado)
  3. Checkbuttons para indicar en qué categorías puede participar (Algoritmos, Web, Móvil, Base de datos)
  4. Un Treeview que muestre una tabla con todos los participantes y sus detalles
  5. Botones para agregar nuevos participantes y eliminar los seleccionados

Piensa críticamente: ¿Cómo validarías que no se ingresen datos duplicados? ¿Qué hacer si un participante quiere cambiar de categoría? ¿Cómo harías para exportar esta información a un archivo?

Este reto te prepara para situaciones reales donde necesitas organizar información de manera eficiente y crear interfaces intuitivas que solucionen problemas concretos de tu comunidad.

Evaluación lúdica: Python Widgets Quiz

Pregunta: 1/5
Puntuación: 0 puntos
¿Cuál de estos widgets permite seleccionar UNA sola opción de un conjunto?
Checkbutton
Radiobutton
Listbox
Treeview