127 lines
5.5 KiB
Python
127 lines
5.5 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk, messagebox, scrolledtext
|
|
from controlador import CorreoControlador
|
|
import threading
|
|
import time
|
|
|
|
class CorreoVista:
|
|
def __init__(self, root, controlador):
|
|
self.root = root
|
|
self.controlador = controlador
|
|
self.root.title("📬 Gestor de Correos")
|
|
self.root.geometry("900x600")
|
|
self.root.configure(bg="#f4f4f4")
|
|
|
|
# Frame del menú izquierdo
|
|
self.menu_frame = tk.Frame(self.root, bg="#333333", width=200)
|
|
self.menu_frame.pack(side=tk.LEFT, fill=tk.Y)
|
|
|
|
# Botones del menú
|
|
self.btn_f1 = tk.Button(self.menu_frame, text="📋 Listado", font=("Arial", 12), bg="#555555", fg="white", relief=tk.FLAT, command=self.mostrar_frame_f1)
|
|
self.btn_f1.pack(fill=tk.X, pady=5, padx=5)
|
|
|
|
self.btn_f2 = tk.Button(self.menu_frame, text="⚙️ Configuración", font=("Arial", 12), bg="#555555", fg="white", relief=tk.FLAT, command=self.mostrar_frame_f2)
|
|
self.btn_f2.pack(fill=tk.X, pady=5, padx=5)
|
|
|
|
# Frame principal derecho
|
|
self.main_frame = tk.Frame(self.root, bg="#f4f4f4")
|
|
self.main_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
|
|
|
|
# Barra inferior
|
|
self.footer_frame = tk.Frame(self.root, bg="#1E90FF", height=30)
|
|
self.footer_frame.place(relx=0, rely=1.0, relwidth=1, anchor="sw")
|
|
|
|
self.footer_label = tk.Label(self.footer_frame, text="Gestor de Correos - 2025", bg="#1E90FF", fg="white", font=("Arial", 10))
|
|
self.footer_label.pack(side=tk.RIGHT, padx=10)
|
|
|
|
# Frames individuales para cada sección
|
|
self.frame_f1 = tk.Frame(self.main_frame, bg="#f4f4f4")
|
|
self.frame_f2 = tk.Frame(self.main_frame, bg="#f4f4f4")
|
|
|
|
self.crear_frame_f1()
|
|
self.crear_frame_f2()
|
|
|
|
# Mostrar el primer frame por defecto
|
|
self.frame_f1.pack(fill=tk.BOTH, expand=True)
|
|
|
|
# Iniciar el hilo de actualización de la barra
|
|
self.ejecutar_hilo_actualizacion_barra()
|
|
|
|
def mostrar_frame_f1(self):
|
|
self.frame_f2.pack_forget()
|
|
self.frame_f1.pack(fill=tk.BOTH, expand=True)
|
|
|
|
def mostrar_frame_f2(self):
|
|
self.frame_f1.pack_forget()
|
|
self.frame_f2.pack(fill=tk.BOTH, expand=True)
|
|
|
|
def crear_frame_f1(self):
|
|
frame_top = tk.Frame(self.frame_f1, bg="#f4f4f4")
|
|
frame_top.pack(pady=10, fill=tk.X)
|
|
|
|
btn_descargar = ttk.Button(frame_top, text="📥 Descargar Correos", command=self.controlador.descargar_correos)
|
|
btn_descargar.pack(side=tk.LEFT, padx=10)
|
|
|
|
btn_mostrar = ttk.Button(frame_top, text="🔍 Mostrar Correo", command=self.mostrar_correo)
|
|
btn_mostrar.pack(side=tk.LEFT, padx=10)
|
|
|
|
frame_list = tk.Frame(self.frame_f1, bg="#ffffff", bd=2, relief=tk.GROOVE)
|
|
frame_list.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
|
|
|
|
self.tree = ttk.Treeview(frame_list, columns=("Remitente", "Asunto", "Fecha", "Cuerpo"), show="headings")
|
|
self.tree.heading("Remitente", text="✉️ Remitente")
|
|
self.tree.heading("Asunto", text="📌 Asunto")
|
|
self.tree.heading("Fecha", text="📅 Fecha")
|
|
self.tree.heading("Cuerpo", text="📝 Cuerpo")
|
|
self.tree.pack(fill=tk.BOTH, expand=True)
|
|
|
|
frame_details = tk.Frame(self.frame_f1, bg="#ffffff", bd=2, relief=tk.GROOVE)
|
|
frame_details.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
|
|
|
|
self.detalle_text = scrolledtext.ScrolledText(frame_details, wrap=tk.WORD, height=10, font=("Arial", 10))
|
|
self.detalle_text.pack(fill=tk.BOTH, expand=True)
|
|
|
|
def crear_frame_f2(self):
|
|
label_config = tk.Label(self.frame_f2, text="⚙️ Configuración", font=("Arial", 16), bg="#f4f4f4")
|
|
label_config.pack(pady=20)
|
|
|
|
def mostrar_correo(self):
|
|
seleccionado = self.tree.selection()
|
|
if not seleccionado:
|
|
messagebox.showwarning("⚠️ Advertencia", "Seleccione un correo")
|
|
return
|
|
|
|
correo_id = seleccionado[0]
|
|
correo = self.tree.item(correo_id, "values")
|
|
|
|
self.detalle_text.delete("1.0", tk.END)
|
|
self.detalle_text.insert(tk.END, f"📧 Remitente: {correo[0]}\n")
|
|
self.detalle_text.insert(tk.END, f"📌 Asunto: {correo[1]}\n")
|
|
self.detalle_text.insert(tk.END, f"📅 Fecha: {correo[2]}\n\n")
|
|
self.detalle_text.insert(tk.END, f"📝 Mensaje:\n{correo[3]}")
|
|
|
|
def actualizar_lista(self):
|
|
self.tree.delete(*self.tree.get_children())
|
|
for correo in self.controlador.obtener_correos():
|
|
self.tree.insert("", "end", values=(correo["remitente"], correo["asunto"], correo["fecha"], correo["cuerpo"]))
|
|
|
|
def ejecutar_hilo_actualizacion_barra(self):
|
|
""" Inicia un hilo para actualizar el color de la barra inferior cada 5 segundos. """
|
|
hilo = threading.Thread(target=self.actualizar_barra_periodicamente, daemon=True)
|
|
hilo.start()
|
|
|
|
def actualizar_barra_periodicamente(self):
|
|
""" Cambia el color de la barra inferior cada 5 segundos según si hay nuevos correos. """
|
|
while True:
|
|
hay_nuevos = self.controlador.modelo.hay_mensajes_nuevos()
|
|
|
|
# Cambiar color de la barra en el hilo principal de Tkinter
|
|
self.root.after(0, self.cambiar_color_barra, "#FF0000" if hay_nuevos else "#1E90FF")
|
|
|
|
time.sleep(5) # Esperar 5 segundos antes de verificar nuevamente
|
|
|
|
def cambiar_color_barra(self, color):
|
|
""" Cambia el color de la barra inferior. """
|
|
self.footer_frame.configure(bg=color)
|
|
self.footer_label.configure(bg=color)
|