El objetivo es crear una aplicación que funcione como un asistente personal de escritorio, capaz de:
Gestionar tareas y recordatorios
Guardar notas
Consultar el tiempo o noticias
Enviar correos automáticos
Registrar eventos en una base de datos
Automatizar acciones (abrir apps, escribir texto, mover el ratón)
Generar informes PDF/Excel
Integrarse con un bot (Telegram opcional)
Todo desde una interfaz gráfica con Tkinter.
Arquitectura del Proyecto
asistente_personal/
│
├── main.py # Interfaz principal (Tkinter)
├── db/
│ └── datos.db # SQLite o TinyDB
├── modulos/
│ ├── tareas.py # CRUD de tareas
│ ├── notas.py # Gestor de notas
│ ├── recordatorios.py # Recordatorios automáticos
│ ├── scraping.py # Web scraping (tiempo, noticias…)
│ ├── correo.py # Envío de emails
│ ├── automatizacion.py # Control de teclado/ratón
│ ├── informes.py # PDF/Excel
│ └── bot.py # Bot de Telegram (opcional)
└── assets/
└── iconos/ # Iconos para la interfaz
1. Módulo de Tareas (CRUD con SQLite o TinyDB)
Ejemplo con SQLite:
import sqlite3
conexion = sqlite3.connect("db/datos.db")
cursor = conexion.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS tareas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT,
descripcion TEXT,
estado TEXT
)
""")
conexion.commit()
def añadir_tarea(titulo, descripcion):
cursor.execute("INSERT INTO tareas (titulo, descripcion, estado) VALUES (?, ?, ?)",
(titulo, descripcion, "pendiente"))
conexion.commit()
def obtener_tareas():
cursor.execute("SELECT * FROM tareas")
return cursor.fetchall()
2. Módulo de Notas
def guardar_nota(titulo, contenido):
with open(f"notas/{titulo}.txt", "w", encoding="utf-8") as f:
f.write(contenido)
3. Módulo de Recordatorios (notificaciones + email opcional)
import time
from tkinter import messagebox
def recordatorio(mensaje, segundos):
time.sleep(segundos)
messagebox.showinfo("Recordatorio", mensaje)
4. Módulo de Web Scraping (tiempo, noticias…)
Ejemplo: obtener temperatura actual.
import requests
from bs4 import BeautifulSoup
def obtener_tiempo(ciudad):
url = f"https://www.eltiempo.es/{ciudad}"
html = requests.get(url).text
soup = BeautifulSoup(html, "html.parser")
temp = soup.find("span", class_="dato-temperatura").text
return temp
5. Módulo de Envío de Correos
import smtplib
from email.mime.text import MIMEText
def enviar_correo(destino, asunto, mensaje):
msg = MIMEText(mensaje)
msg["Subject"] = asunto
msg["From"] = "tu_correo@gmail.com"
msg["To"] = destino
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login("tu_correo@gmail.com", "tu_contraseña")
server.send_message(msg)
6. Módulo de Automatización (PyAutoGUI)
import pyautogui
def abrir_navegador():
pyautogui.hotkey("win")
pyautogui.write("chrome")
pyautogui.press("enter")
7. Módulo de Informes (PDF + Excel)
PDF con ReportLab:
from reportlab.pdfgen import canvas
def generar_informe():
c = canvas.Canvas("informe.pdf")
c.drawString(50, 800, "Informe del Asistente Personal")
c.save()
8. Interfaz Principal (Tkinter)
import tkinter as tk
from modulos import tareas, scraping
ventana = tk.Tk()
ventana.title("Asistente Personal")
ventana.geometry("500x500")
def mostrar_tiempo():
ciudad = entrada_ciudad.get()
temp = scraping.obtener_tiempo(ciudad)
label_resultado.config(text=f"Temperatura: {temp}")
entrada_ciudad = tk.Entry(ventana)
entrada_ciudad.pack()
boton_tiempo = tk.Button(ventana, text="Consultar tiempo", command=mostrar_tiempo)
boton_tiempo.pack()
label_resultado = tk.Label(ventana, text="")
label_resultado.pack()
ventana.mainloop()
ACTIVIDAD FINAL: “Entrega del Asistente Personal”
Requisitos mínimos
Interfaz Tkinter con menú lateral
Módulo de tareas (CRUD completo)
Módulo de notas
Módulo de recordatorios
Consulta del tiempo o noticias por scraping
Envío de correos
Generación de un informe PDF
Base de datos SQLite o TinyDB
Entorno virtual (venv)
Documentación con Doctest o README
Requisitos opcionales (para nota extra)
Bot de Telegram integrado
Automatización con PyAutoGUI
Exportación a Excel
Tema oscuro / diseño moderno (CustomTkinter)
API REST con Flask
Resultado esperado
Un asistente personal completo, modular, ampliable y profesional, que demuestra dominio de:
Python avanzado
Tkinter
Bases de datos
Web scraping
Automatización
Envío de correos
PDF/Excel
Buenas prácticas (venv, documentación, módulos)
Un proyecto perfecto para evaluación final o incluso para el portfolio del alumno.