import tkinter as tk
from tkinter import messagebox
import time
# Constants
WORK_MIN = 25 # Work duration in minutes
SHORT_BREAK_MIN = 5 # Short break duration in minutes
LONG_BREAK_MIN = 15 # Long break duration in minutes
CYCLES = 4 # Number of work sessions before a long break
class PomodoroTimer:
def __init__(self):
self.root = tk.Tk()
self.root.title("Pomodoro Timer")
self.timer_running = False
self.current_cycle = 0
self.time_left = 0
# UI Setup
self.label = tk.Label(self.root, text="Pomodoro Timer", font=("Arial", 20))
self.label.pack(pady=10)
self.time_label = tk.Label(self.root, text="00:00", font=("Arial", 40))
self.time_label.pack(pady=10)
self.start_button = tk.Button(self.root, text="Start", font=("Arial", 15), command=self.start_timer)
self.start_button.pack(side="left", padx=10)
self.reset_button = tk.Button(self.root, text="Reset", font=("Arial", 15), command=self.reset_timer)
self.reset_button.pack(side="right", padx=10)
def start_timer(self):
if not self.timer_running:
self.current_cycle += 1
if self.current_cycle % (CYCLES + 1) == 0:
self.time_left = LONG_BREAK_MIN * 60
self.label.config(text="Long Break", fg="blue")
elif self.current_cycle % 2 == 0:
self.time_left = SHORT_BREAK_MIN * 60
self.label.config(text="Short Break", fg="green")
else:
self.time_left = WORK_MIN * 60
self.label.config(text="Work", fg="red")
self.timer_running = True
self.countdown()
def countdown(self):
if self.time_left > 0:
mins, secs = divmod(self.time_left, 60)
self.time_label.config(text=f"{mins:02}:{secs:02}")
self.time_left -= 1
self.root.after(1000, self.countdown)
else:
self.timer_running = False
self.time_label.config(text="00:00")
if self.current_cycle % 2 != 0:
messagebox.showinfo("Time's up!", "Time for a break!")
else:
messagebox.showinfo("Time's up!", "Time to work!")
def reset_timer(self):
self.timer_running = False
self.current_cycle = 0
self.time_left = 0
self.label.config(text="Pomodoro Timer", fg="black")
self.time_label.config(text="00:00")
def run(self):
self.root.mainloop()
# Run the Pomodoro Timer
if __name__ == "__main__":
PomodoroTimer().run()
No comments:
Post a Comment