Proyecto Final: Asistente personal

 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

  1. Interfaz Tkinter con menú lateral

  2. Módulo de tareas (CRUD completo)

  3. Módulo de notas

  4. Módulo de recordatorios

  5. Consulta del tiempo o noticias por scraping

  6. Envío de correos

  7. Generación de un informe PDF

  8. Base de datos SQLite o TinyDB

  9. Entorno virtual (venv)

  10. 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.