Tkinter te permite crear interfaces rápidas. Una app de alarmas es un ejercicio perfecto: inputs, validación y un “evento” que sucede más tarde.
1) UI mínima
import tkinter as tk
from tkinter import messagebox
import time
import threading
root = tk.Tk()
root.title("Alarma (demo)")
tk.Label(root, text="Hora (HH:MM):").pack(padx=12, pady=(12, 4))
hour_var = tk.StringVar()
tk.Entry(root, textvariable=hour_var).pack(padx=12, pady=(0, 12))
status = tk.Label(root, text="Sin alarma", fg="gray")
status.pack(pady=(0, 12))
2) Esperar sin bloquear la UI
La UI no debe congelarse: usamos un hilo que espera y luego “dispara” la alarma.
def wait_alarm(target_hhmm):
while True:
if time.strftime("%H:%M") == target_hhmm:
root.after(0, lambda: messagebox.showinfo("Alarma", "¡Hora!"))
break
time.sleep(1)
def set_alarm():
hhmm = hour_var.get().strip()
if len(hhmm) != 5 or hhmm[2] != ":":
messagebox.showerror("Error", "Formato HH:MM")
return
status.config(text=f"Alarma a las {hhmm}", fg="green")
threading.Thread(target=wait_alarm, args=(hhmm,), daemon=True).start()
tk.Button(root, text="Activar alarma", command=set_alarm).pack(pady=(0, 12))
root.mainloop()
3) Ideas de mejora
- Reproducir un audio (por ejemplo con
playsoundopygame.mixer). - Permitir varias alarmas (lista + borrado).
- Guardar alarmas en archivo/JSON.
