Pomodoro
This commit is contained in:
parent
98dd351ba1
commit
d697b3f7cf
Binary file not shown.
|
@ -0,0 +1,134 @@
|
||||||
|
import tkinter as tk
|
||||||
|
from tkinter import ttk, messagebox
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class PomodoroTimer:
|
||||||
|
def __init__(self, parent):
|
||||||
|
self.parent = parent
|
||||||
|
self.work_time = 25 * 60
|
||||||
|
self.break_time = 5 * 60
|
||||||
|
self.remaining_time = self.work_time
|
||||||
|
self.is_running = False
|
||||||
|
self.is_break = False
|
||||||
|
self.timer_thread = None
|
||||||
|
|
||||||
|
# Interfaz del Pomodoro
|
||||||
|
self.frame = tk.Frame(parent, bg="white")
|
||||||
|
self.frame.pack(fill="both", expand=True)
|
||||||
|
|
||||||
|
# Título del temporizador
|
||||||
|
self.title_label = tk.Label(
|
||||||
|
self.frame, text="Pomodoro Timer", font=("Helvetica", 18, "bold"), bg="white", fg="#ff6347"
|
||||||
|
)
|
||||||
|
self.title_label.pack(pady=20)
|
||||||
|
|
||||||
|
# Barra de progreso
|
||||||
|
self.progress = ttk.Progressbar(self.frame, maximum=self.work_time, length=300)
|
||||||
|
self.progress.pack(pady=10)
|
||||||
|
|
||||||
|
# Label del temporizador
|
||||||
|
self.timer_label = tk.Label(
|
||||||
|
self.frame, text=self.format_time(self.remaining_time), font=("Helvetica", 36, "bold"), bg="white", fg="#4caf50"
|
||||||
|
)
|
||||||
|
self.timer_label.pack(pady=10)
|
||||||
|
|
||||||
|
# Contenedor para botones
|
||||||
|
button_frame = tk.Frame(self.frame, bg="white")
|
||||||
|
button_frame.pack(pady=20)
|
||||||
|
|
||||||
|
self.start_button = tk.Button(
|
||||||
|
button_frame, text="Iniciar", command=self.start_timer, bg="#4caf50", fg="white", font=("Helvetica", 12, "bold"), width=10
|
||||||
|
)
|
||||||
|
self.start_button.grid(row=0, column=0, padx=5)
|
||||||
|
|
||||||
|
self.pause_button = tk.Button(
|
||||||
|
button_frame, text="Pausar", command=self.pause_timer, bg="#ff9800", fg="white", font=("Helvetica", 12, "bold"), width=10
|
||||||
|
)
|
||||||
|
self.pause_button.grid(row=0, column=1, padx=5)
|
||||||
|
|
||||||
|
self.reset_button = tk.Button(
|
||||||
|
button_frame, text="Reiniciar", command=self.reset_timer, bg="#f44336", fg="white", font=("Helvetica", 12, "bold"), width=10
|
||||||
|
)
|
||||||
|
self.reset_button.grid(row=0, column=2, padx=5)
|
||||||
|
|
||||||
|
# Configuración de tiempos
|
||||||
|
settings_frame = tk.Frame(self.frame, bg="white")
|
||||||
|
settings_frame.pack(pady=20)
|
||||||
|
|
||||||
|
self.settings_label = tk.Label(
|
||||||
|
settings_frame, text="Configurar tiempos (min):", font=("Helvetica", 10), bg="white"
|
||||||
|
)
|
||||||
|
self.settings_label.grid(row=0, column=0, columnspan=2, pady=5)
|
||||||
|
|
||||||
|
tk.Label(settings_frame, text="Trabajo:", font=("Helvetica", 10), bg="white").grid(row=1, column=0, pady=5)
|
||||||
|
self.work_time_entry = tk.Entry(settings_frame, width=5, justify="center")
|
||||||
|
self.work_time_entry.insert(0, "25")
|
||||||
|
self.work_time_entry.grid(row=1, column=1, pady=5)
|
||||||
|
|
||||||
|
tk.Label(settings_frame, text="Descanso:", font=("Helvetica", 10), bg="white").grid(row=2, column=0, pady=5)
|
||||||
|
self.break_time_entry = tk.Entry(settings_frame, width=5, justify="center")
|
||||||
|
self.break_time_entry.insert(0, "5")
|
||||||
|
self.break_time_entry.grid(row=2, column=1, pady=5)
|
||||||
|
|
||||||
|
self.apply_button = tk.Button(
|
||||||
|
settings_frame, text="Aplicar", command=self.apply_settings, bg="#2196f3", fg="white", font=("Helvetica", 10, "bold")
|
||||||
|
)
|
||||||
|
self.apply_button.grid(row=3, column=0, columnspan=2, pady=10)
|
||||||
|
|
||||||
|
def start_timer(self):
|
||||||
|
if not self.is_running:
|
||||||
|
self.is_running = True
|
||||||
|
self.timer_thread = threading.Thread(target=self.run_timer, daemon=True)
|
||||||
|
self.timer_thread.start()
|
||||||
|
|
||||||
|
def pause_timer(self):
|
||||||
|
self.is_running = False
|
||||||
|
|
||||||
|
def reset_timer(self):
|
||||||
|
self.is_running = False
|
||||||
|
self.remaining_time = self.work_time if not self.is_break else self.break_time
|
||||||
|
self.update_timer_label()
|
||||||
|
self.progress["value"] = 0
|
||||||
|
|
||||||
|
def apply_settings(self):
|
||||||
|
try:
|
||||||
|
work_minutes = int(self.work_time_entry.get())
|
||||||
|
break_minutes = int(self.break_time_entry.get())
|
||||||
|
self.work_time = work_minutes * 60
|
||||||
|
self.break_time = break_minutes * 60
|
||||||
|
self.reset_timer()
|
||||||
|
except ValueError:
|
||||||
|
messagebox.showerror("Error", "Por favor, ingresa valores numéricos válidos.")
|
||||||
|
|
||||||
|
def run_timer(self):
|
||||||
|
while self.remaining_time > 0 and self.is_running:
|
||||||
|
time.sleep(1)
|
||||||
|
self.remaining_time -= 1
|
||||||
|
self.update_timer_label()
|
||||||
|
self.progress["value"] = (self.work_time if not self.is_break else self.break_time) - self.remaining_time
|
||||||
|
|
||||||
|
if self.remaining_time == 0 and self.is_running:
|
||||||
|
self.is_running = False
|
||||||
|
self.is_break = not self.is_break
|
||||||
|
# Actualizar el tiempo restante según la nueva fase
|
||||||
|
self.remaining_time = self.break_time if self.is_break else self.work_time
|
||||||
|
self.progress["maximum"] = self.break_time if self.is_break else self.work_time # Actualiza el máximo
|
||||||
|
self.update_timer_label()
|
||||||
|
self.progress["value"] = 0 # Reinicia la barra
|
||||||
|
messagebox.showinfo(
|
||||||
|
"Pomodoro Finalizado",
|
||||||
|
"¡Tiempo de descanso!" if self.is_break else "¡Tiempo de trabajar!",
|
||||||
|
)
|
||||||
|
if self.is_running:
|
||||||
|
self.start_timer()
|
||||||
|
|
||||||
|
|
||||||
|
def update_timer_label(self):
|
||||||
|
self.timer_label.config(text=self.format_time(self.remaining_time))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def format_time(seconds):
|
||||||
|
minutes, seconds = divmod(seconds, 60)
|
||||||
|
return f"{minutes:02d}:{seconds:02d}"
|
17
main.py
17
main.py
|
@ -4,6 +4,7 @@ from tkinter import ttk # Importar el widget ttk
|
||||||
from tkinter import messagebox
|
from tkinter import messagebox
|
||||||
from app import monitorization
|
from app import monitorization
|
||||||
from app import panel_derecho
|
from app import panel_derecho
|
||||||
|
from app import pomodoro
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
@ -105,11 +106,19 @@ notebook.pack(fill="both", expand=True)
|
||||||
# Crear cinco solapas
|
# Crear cinco solapas
|
||||||
for i in range(1, 6):
|
for i in range(1, 6):
|
||||||
tab = ttk.Frame(notebook)
|
tab = ttk.Frame(notebook)
|
||||||
|
if i == 1:
|
||||||
|
notebook.add(tab, text="Scrapping", padding=4)
|
||||||
|
elif i == 2: # Identificar la solapa 2
|
||||||
|
notebook.add(tab, text="Pomodoro", padding=4)
|
||||||
|
pomodoro.PomodoroTimer(tab)
|
||||||
|
elif i == 3:
|
||||||
|
notebook.add(tab, text="Gestor de tareas", padding=4)
|
||||||
|
else:
|
||||||
|
notebook.add(tab, text=f"Solapa {i}", padding=4)
|
||||||
|
# Añadir un Label en cada solapa para diferenciarla
|
||||||
|
label = ttk.Label(tab, text=f"Contenido de la Solapa {i}")
|
||||||
|
label.pack(pady=10)
|
||||||
|
|
||||||
notebook.add(tab, text=f"Solapa {i}", padding=4)
|
|
||||||
# Añadir un Label en cada solapa para diferenciarla
|
|
||||||
label = ttk.Label(tab, text=f"Contenido de la Solapa {i}")
|
|
||||||
label.pack(pady=10)
|
|
||||||
|
|
||||||
# Barra de estado
|
# Barra de estado
|
||||||
# Dividir la barra de estado en 4 labels
|
# Dividir la barra de estado en 4 labels
|
||||||
|
|
Loading…
Reference in New Issue