✨ BASES DE DATOS CON ALMA ✨
Tkinter + SQLite: el arte de guardar historias
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.
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.
✨ La creatividad encuentra su forma digital
¿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
Conexión entre interfaz y datos
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.
✨ Cada respuesta correcta suma 100 puntos. ¡Reflexiona antes de elegir!
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!