En este artículo vamos a ver cómo crear un Pomodoro usando Python Tkinter.
¿Por qué Pomodoro?
Concentrarse en los estudios o el trabajo es la parte más esencial de la gestión del tiempo. Siempre estropeamos la gestión del tiempo cuando se trata de centrarnos en el trabajo. Afortunadamente, puede administrar su tiempo concentrándose en su trabajo y luego tomando un breve descanso para relajarse. La técnica Pomodoro es la técnica más preferida para concentrarse en el trabajo durante un tiempo específico sin ninguna distracción. Pomodoro juega un papel importante en la creación de un sistema de gestión del tiempo eficaz.
En primer lugar, debe tomar una tarea y trabajar en ella durante 25 minutos seguidos sin ninguna distracción. Una vez que termine el período de tiempo de 25 minutos, tómese un breve descanso de 5 minutos. En estos 5 minutos, puedes relajar tu cerebro escuchando música o Podcasts cortos. Repite este proceso de 4 a 5 veces al día y verás un cambio drástico.
Crear temporizador Pomodoro usando Python Tkinter
Pomodoro comienza con 25 minutos de trabajo, debes concentrarte durante 25 minutos. Una vez que se completa el período de tiempo de 25 minutos, utilizando el cuadro de mensaje de Tkinter puede solicitar la información. Lo mismo ocurre con el período de descanso también.
Ahora, una vez que hayamos importado las bibliotecas requeridas, lo siguiente es crear una interferencia de GUI . Pomodoro significa «Tomate» en italiano. Para que esta GUI se vea realista, usaremos una imagen de tomate como imagen de fondo. Puede agregar la imagen de fondo a la aplicación Tkinter usando el widget Canvas. Finalmente, hablar sobre la parte final del proyecto es programar el temporizador de cuenta regresiva.
Usaremos el módulo de tiempo para tratar con el temporizador de cuenta regresiva. Ya que ahora está familiarizado con la Técnica Pomodoro, primero cree una función de comando para 25 minutos de trabajo. Inicialice la variable de minutos, segundos y almacene el total de segundos de trabajo y tiempo de descanso en una variable. Disminuya el contador y actualice la ventana GUI cada segundo. Una vez que el conteo llega a cero, debe cambiar de trabajo a descanso o viceversa. ¿Cómo sabrás cuándo el conteo es cero cuando estás concentrado en el trabajo? Puede usar el cuadro de mensaje de Tkinter aquí. Además, incluso puede implementar un módulo de reproducción de sonido y reproducir música pequeña cuando el conteo es 0.
Aquí está el truco para escribir la sintaxis del temporizador en Tkinter:
Dado que el tiempo inicial es de 25 minutos, primero convierta los minutos en segundos.
Python3
# timer = minutes*60 timer = 25*60 #for work timer = 5*60 #for break
Ok, ahora que tenemos nuestro temporizador listo, debemos disminuirlo después de cada segundo. Esto se puede implementar usando time.sleep(1).
Pero el problema principal podría ocurrir al configurar minutos y segundos en la GUI. Dado que el temporizador está en segundos, nuestro decremento también estará en segundos, es decir, 1500, 1499, 1498, y así sucesivamente. Para mostrar el minuto y el segundo, utilizaremos la siguiente fórmula:
#for minutes: timer//60 #for seconds: timer%60
Por ejemplo, considerando el segundo 1366, implementaremos la fórmula anterior usando la función divmod().
Python3
# divmod syntax: divmod(x,y) => returns tuple (x//y,x%y) minute, second = divmod(1366, 60) print(minute) print(second)
Archivos utilizados:
A continuación se muestra la implementación:
Python3
import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk from playsound import playsound import time class Pomodoro: def __init__(self, root): self.root = root def work_break(self, timer): # common block to display minutes # and seconds on GUI minutes, seconds = divmod(timer, 60) self.min.set(f"{minutes:02d}") self.sec.set(f"{seconds:02d}") self.root.update() time.sleep(1) def work(self): timer = 25*60 while timer >= 0: pomo.work_break(timer) if timer == 0: # once work is done play # a sound and switch for break playsound("sound.ogg") messagebox.showinfo( "Good Job", "Take A Break, \ nClick Break Button") timer -= 1 def break_(self): timer = 5*60 while timer >= 0: pomo.work_break(timer) if timer == 0: # once break is done, # switch back to work playsound("sound.ogg") messagebox.showinfo( "Times Up", "Get Back To Work, \ nClick Work Button") timer -= 1 def main(self): # GUI window configuration self.root.geometry("450x455") self.root.resizable(False, False) self.root.title("Pomodoro Timer") # label self.min = tk.StringVar(self.root) self.min.set("25") self.sec = tk.StringVar(self.root) self.sec.set("00") self.min_label = tk.Label(self.root, textvariable=self.min, font=( "arial", 22, "bold"), bg="red", fg='black') self.min_label.pack() self.sec_label = tk.Label(self.root, textvariable=self.sec, font=( "arial", 22, "bold"), bg="black", fg='white') self.sec_label.pack() # add background image for GUI using Canvas widget canvas = tk.Canvas(self.root) canvas.pack(expand=True, fill="both") img = Image.open('pomodoro.jpg') bg = ImageTk.PhotoImage(img) canvas.create_image(90, 10, image=bg, anchor="nw") # create three buttons with countdown function command btn_work = tk.Button(self.root, text="Start", bd=5, command=self.work, bg="red", font=( "arial", 15, "bold")).place(x=140, y=380) btn_break = tk.Button(self.root, text="Break", bd=5, command=self.break_, bg="red", font=( "arial", 15, "bold")).place(x=240, y=380) self.root.mainloop() if __name__ == '__main__': pomo = Pomodoro(tk.Tk()) pomo.main()
Producción: