main.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import time
  2. import threading
  3. import tkinter as tk
  4. from tkinter import ttk, PhotoImage
  5. class PomodoroTimer:
  6. def __init__(self):
  7. self.root = tk.Tk()
  8. self.root.geometry("600x300")
  9. self.root.title("Pomodoro Bridge Timer")
  10. self.root.tk.call('wm', 'iconphoto', self.root._w, PhotoImage(file='tomato.png'))
  11. self.s = ttk.Style()
  12. self.s.configure('TNotebook.Tab', font=('Ubuntu', 16))
  13. self.s.configure('TButton', font=('Ubuntu', 16))
  14. self.tabs = ttk.Notebook(self.root)
  15. self.tabs.pack(fill='both', pady=10, expand=True)
  16. self.tab1 = ttk.Frame(self.tabs, width=600, height=100)
  17. self.tab2 = ttk.Frame(self.tabs, width=600, height=100)
  18. self.tab3 = ttk.Frame(self.tabs, width=600, height=100)
  19. self.pomodoro_timer_label = ttk.Label(self.tab1, text="25:00", font=('Ubuntu', 48))
  20. self.pomodoro_timer_label.pack(pady=20)
  21. self.short_break_timer_label = ttk.Label(self.tab2, text="05:00", font=('Ubuntu', 48))
  22. self.short_break_timer_label.pack(pady=20)
  23. self.long_break_timer_label = ttk.Label(self.tab3, text="15:00", font=('Ubuntu', 48))
  24. self.long_break_timer_label.pack(pady=20)
  25. self.grid_layout = ttk.Frame(self.root)
  26. self.grid_layout.pack(pady=10)
  27. self.start_button = ttk.Button(self.grid_layout, text='Start', command=self.start_timer_thread)
  28. self.start_button.grid(row=0, column=0)
  29. self.skip_button = ttk.Button(self.grid_layout, text='Skip', command=self.skip_clock)
  30. self.skip_button.grid(row=0, column=1)
  31. self.reset_button = ttk.Button(self.grid_layout, text='Reset', command=self.reset_clock)
  32. self.reset_button.grid(row=0, column=2)
  33. self.tabs.add(self.tab1, text="Pomodoro")
  34. self.tabs.add(self.tab2, text="Short Break")
  35. self.tabs.add(self.tab3, text="Long Break")
  36. self.pomodoro_counter_label = ttk.Label(self.grid_layout, text="Pomodoros: 0", font=("Ubuntu", 16))
  37. self.pomodoro_counter_label.grid(column=0, row=1, columnspan=3, pady=10)
  38. self.pomodoros = 0
  39. self.skipped = False
  40. self.stopped = False
  41. self.running = False
  42. self.root.mainloop()
  43. def start_timer_thread(self):
  44. if not self.running:
  45. t = threading.Thread(target=self.start_timer)
  46. t.start()
  47. self.running = True
  48. def start_timer(self):
  49. self.stopped = False
  50. self.skipped = False
  51. self.running = False
  52. timer_id = self.tabs.index(self.tabs.select()) + 1
  53. if timer_id == 1:
  54. full_seconds = 60 * 25
  55. while full_seconds > 0 and not self.stopped:
  56. minutes, seconds = divmod(full_seconds, 60)
  57. self.pomodoro_timer_label.config(text=f"{minutes:02d}:{seconds:02d}")
  58. self.root.update()
  59. time.sleep(1)
  60. full_seconds -= 1
  61. if not self.stopped or self.skipped:
  62. self.pomodoros += 1
  63. self.pomodoro_timer_label.config(text=f"Pomodoros: {self.pomodoros}")
  64. if self.pomodoros % 4 == 0:
  65. self.tabs.select(2)
  66. else:
  67. self.tabs.select(1)
  68. self.start_timer()
  69. elif timer_id == 2:
  70. full_seconds = 60 * 5
  71. while full_seconds > 0 and not self.stopped:
  72. minutes, seconds = divmod(full_seconds, 60)
  73. self.short_break_timer_label.config(text=f"{minutes:02d}:{seconds:02d}")
  74. self.root.update()
  75. time.sleep(1)
  76. full_seconds -= 1
  77. if not self.stopped or self.skipped:
  78. self.tabs.select(0)
  79. self.start_timer()
  80. elif timer_id == 2:
  81. full_seconds = 60 * 15
  82. while full_seconds > 0 and not self.stopped:
  83. minutes, seconds = divmod(full_seconds, 60)
  84. self.long_break_timer_label.config(text=f"{minutes:02d}:{seconds:02d}")
  85. self.root.update()
  86. time.sleep(1)
  87. full_seconds -= 1
  88. if not self.stopped or self.skipped:
  89. self.tabs.select(0)
  90. self.start_timer()
  91. def reset_clock(self):
  92. self.stopped = True
  93. self.skipped = False
  94. self.pomodoros = 0
  95. self.pomodoro_timer_label.config(text="25:00")
  96. self.short_break_timer_label.config(text="05:00")
  97. self.long_break_timer_label.config(text="15:00")
  98. self.pomodoro_counter_label.config(text="Pomodoros: 0")
  99. self.running = False
  100. def skip_clock(self):
  101. current_tab = self.tabs.index(self.tabs.select())
  102. if current_tab == 0:
  103. self.pomodoro_timer_label.config(text="25:00")
  104. elif current_tab == 1:
  105. self.short_break_timer_label.config(text="05:00")
  106. elif current_tab == 2:
  107. self.long_break_timer_label.config(text="15:00")
  108. self.stopped = True
  109. self.skipped = True
  110. PomodoroTimer()