✨ BASES DE DATOS CON ALMA ✨
Tkinter + SQLite: el arte de guardar historias

Python para pensadores · Taller diseñado con el corazón de un docente y la mente de un programador.
Tema: Tkinter (SQLite completo)
🎯 Brújula del taller

Objetivo: Diseñar una aplicación de escritorio con Tkinter y SQLite que gestione datos reales, integrando creatividad, pensamiento lógico y responsabilidad ética, para solucionar necesidades cotidianas con tecnología propia.

Competencia a alcanzar: Construir interfaces gráficas funcionales que interactúen con una base de datos relacional, aplicando buenas prácticas, depuración consciente y trabajo colaborativo para transformar ideas en herramientas útiles.

🔥 Activación: El cuaderno perdido

📖 Historia: Valeria, una estudiante de bachillerato, llevaba un diario con todas las recetas de su abuela. Un día su cuaderno se mojó y perdió años de recuerdos. Ella dijo: “Necesito una aplicación donde pueda guardar, buscar y nunca perder mis recetas”. Así nació la idea: ¿Y si tú construyes con Python + SQLite un organizador personal que proteja lo valioso? 💡

Hoy programarás una pequeña agenda que puede extenderse a inventarios, contactos o sueños. Porque cada dato cuenta una historia.

cuaderno digital ilustración

✨ La creatividad encuentra su forma digital

🧠 Mente & código: ¿Qué es Tkinter + SQLite?

Tkinter es la biblioteca estándar de Python que te permite crear ventanas, botones y formularios. SQLite es una base de datos ligera que vive dentro de tu programa. Juntos forman un dúo poderoso: interfaz amigable + persistencia confiable.

Imagina que construyes un gestor de tareas donde cada tarea tiene título, descripción y fecha. Tkinter te da el lienzo para que el usuario ingrese datos; SQLite los guarda para siempre (o hasta que los borres). Hoy aprenderás a conectar ambos mundos.

Filosofía estoica aplicada: La tecnología es una herramienta, pero tu enfoque determina su impacto. Programa con intención, cada línea refleja tu propósito de ayudar.

código y datos

Conexión entre interfaz y datos

🛠️ Manos a la obra: ejemplo completo (mini CRUD)

A continuación, un programa que crea una ventana Tkinter para registrar estudiantes y los almacena en SQLite. ¡Analízalo, modifícalo, experimenta!

   import sqlite3
import tkinter as tk
from tkinter import messagebox, ttk

# --- CONEXIÓN Y CREACIÓN DE TABLA ---
conn = sqlite3.connect('tareas.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS tareas (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                nombre TEXT NOT NULL,
                estado TEXT DEFAULT 'pendiente')''')
conn.commit()

def agregar_tarea():
    tarea = entry_tarea.get()
    if tarea:
        c.execute("INSERT INTO tareas (nombre) VALUES (?)", (tarea,))
        conn.commit()
        entry_tarea.delete(0, tk.END)
        mostrar_tareas()
    else:
        messagebox.showwarning("Advertencia", "Escribe una tarea")

def mostrar_tareas():
    for row in tree.get_children():
        tree.delete(row)
    c.execute("SELECT * FROM tareas")
    for tarea in c.fetchall():
        tree.insert('', tk.END, values=tarea)

def completada_tarea():
    selected = tree.selection()
    if selected:
        item = tree.item(selected)
        tarea_id = item['values'][0]
        c.execute("UPDATE tareas SET estado = 'completada' WHERE id = ?", (tarea_id,))
        conn.commit()
        mostrar_tareas()

def eliminar_tarea():
    selected = tree.selection()
    if selected:
        item = tree.item(selected)
        tarea_id = item['values'][0]
        c.execute("DELETE FROM tareas WHERE id = ?", (tarea_id,))
        conn.commit()
        mostrar_tareas()

# Ventana principal
ventana = tk.Tk()
ventana.title("Mis Tareas estoicas")
ventana.geometry("550x450")
ventana.configure(bg='#f0f4f8')

frame_sup = tk.Frame(ventana, bg='#f0f4f8')
frame_sup.pack(pady=12)
tk.Label(frame_sup, text="📌 Nueva tarea:", font=('Segoe UI', 12), bg='#f0f4f8').pack(side=tk.LEFT, padx=5)
entry_tarea = tk.Entry(frame_sup, width=30, font=('Segoe UI', 11))
entry_tarea.pack(side=tk.LEFT, padx=5)
btn_agregar = tk.Button(frame_sup, text="➕ Agregar", command=agregar_tarea, bg='#2c6e9e', fg='white', font=('Segoe UI', 10))
btn_agregar.pack(side=tk.LEFT, padx=5)

frame_botones = tk.Frame(ventana, bg='#f0f4f8')
frame_botones.pack(pady=6)
btn_completada = tk.Button(frame_botones, text="✅ completada", command=completada_tarea, bg='#4a8b6e', fg='white')
btn_completada.pack(side=tk.LEFT, padx=10)
btn_eliminar = tk.Button(frame_botones, text="🗑️ Eliminar", command=eliminar_tarea, bg='#b6492e', fg='white')
btn_eliminar.pack(side=tk.LEFT, padx=10)

tree = ttk.Treeview(ventana, columns=('ID', 'Tarea', 'Estado'), show='headings', height=12)
tree.heading('ID', text='ID')
tree.heading('Tarea', text='Descripción')
tree.heading('Estado', text='Estado')
tree.column('ID', width=40)
tree.column('Tarea', width=300)
tree.column('Estado', width=100)
tree.pack(pady=15, padx=20, fill=tk.BOTH, expand=True)

mostrar_tareas()
ventana.mainloop()
conn.close()

🧪 Desafío para tu mente crítica: Extiende este código para crear una "Agenda de proyectos comunitarios". Debe permitir agregar proyecto (nombre, responsable, fecha límite) y listarlos. Reflexiona: ¿cómo organizarías las tablas? ¿Qué validaciones agregarías para fomentar la ética de los datos? ¡Explora, rompe y reconstruye!

🔁 Consigna evaluativa: Implementa una nueva tabla "proyectos" con al menos 3 campos. Incluye un botón "Mostrar proyectos". Comparte con tu compañero y explícale cómo interactúa la interfaz con la base de datos. Aprendizaje colaborativo.

🎮 Reto Código Maestro · Pon a prueba tu comprensión
Puntaje: 0

✨ Cada respuesta correcta suma 100 puntos. ¡Reflexiona antes de elegir!

🌿 Cierre consciente

Hoy hemos descubierto que Tkinter nos permite construir puentes visuales y SQLite nos brinda memoria persistente. Aprendimos que programar es diseñar soluciones con impacto humano. Cada tabla es una estructura de confianza, cada ventana es una oportunidad de servir.

✅ Resumen: Interfaz gráfica + base de datos local = aplicaciones reales. Integraste pensamiento lógico, creatividad y ética. El código no solo hace cosas, transforma realidades. Sigue explorando, pregunta, equivócate y mejora. ¡Sigue siendo un pensador estoico de la tecnología!