✨ 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: Base de datos SQLite
🎯 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

Valeria, estudiante de bachillerato que vive en Zuleta, guardaba en un cuaderno todas las recetas heredadas de su abuela. Cada página era un recuerdo, cada ingrediente una historia. Pero un día, un accidente lo cambió todo: su cuaderno se mojó y, con él, varias se mojaron y las recetas se perdieron se desvanecieron años de memorias.
Frustrada pero decidida, pensó: “Necesito una aplicación donde pueda guardar mis recetas, encontrarlas fácilmente y asegurarme de no perderlas nunca más.”
Así nació una idea poderosa: ¿y si tú pudieras crear, con Python y SQLite, un organizador personal capaz de proteger lo que más valoras?
Hoy no solo programarás una agenda digital. Estarás construyendo una herramienta que puede crecer contigo: desde recetas hasta inventarios, contactos o incluso tus propios sueños. Porque detrás de cada dato, siempre hay una historia.💡

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 SQLite?

SQLite es un sistema de gestión de bases de datos relacional muy ligero y fácil de usar.

A diferencia de otros motores de bases de datos, SQLite no necesita un servidor: todo se guarda en un solo archivo en tu computadora o aplicación. Esto lo hace ideal para proyectos pequeños, aplicaciones móviles o programas personales.

Características clave

  • 📁 Basado en archivos: toda la base de datos está en un solo archivo (.db)
  • ⚡ Ligero y rápido: no requiere instalación compleja
  • 🔌 Integrado: viene incluido en muchos lenguajes como Python
  • 🧠 SQL estándar: usa comandos como CREATE, SELECT, INSERT, UPDATE, DELETE
código y datos

Conexión entre interfaz y datos

🛠️ Manos a la obra: ejemplo mini CRUD--Create - Read - Update - Delete--

A continuación, un programa que crea una ventana Tkinter para llevar el control de tareas y almacena la información 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
1. 🔍 ¿Qué biblioteca de Python se utiliza para crear interfaces gráficas de escritorio?
Puntaje: 0

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

🌿 Cierre

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!