Crear un Pomodoro usando Python Tkinter

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:

sonido.ogg

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:

Publicación traducida automáticamente

Artículo escrito por jaintarun y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *