Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 213e0fd

Browse files
Add files via upload
1 parent 9888be7 commit 213e0fd

File tree

5 files changed

+221
-0
lines changed

5 files changed

+221
-0
lines changed

‎Pomodoro_GUI/Pomodoro_gui.py‎

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
import time
2+
import tkinter as tk
3+
from tkinter import messagebox
4+
import pygame
5+
from datetime import timedelta
6+
7+
pygame.mixer.init()
8+
pomo_count = 0
9+
break_count = 0
10+
11+
# path of host file in windows
12+
host_path = r"C:\Windows\System32\drivers\etc\hosts"
13+
14+
# URL of websites to block
15+
block_list = [
16+
'www.facebook.com', 'facebook.com',
17+
'www.youtube.com', 'youtube.com',
18+
'www.gmail.com', 'gmail.com',
19+
'www.instagram.com', 'instagram.com',
20+
'www.twitter.com', 'twitter.com'
21+
]
22+
23+
# redirecting above URLs to this localhost to ensure blocking
24+
redirect = "127.0.0.1"
25+
26+
def block_websites():
27+
"""
28+
The function will open the host file and add the block-list websites to
29+
the file if it is not already present and redirect it to the localhost
30+
for blocking
31+
"""
32+
33+
try:
34+
# Opening the host file in reading and writing mode
35+
with open(host_path, 'r+') as h_file:
36+
content = h_file.read()
37+
38+
for website in block_list:
39+
40+
# Website is already blocked
41+
if website in content:
42+
pass
43+
44+
# To redirect the website to be blocked
45+
else:
46+
h_file.write(redirect + "\t" + website + "\n")
47+
48+
except PermissionError:
49+
tk.messagebox.showinfo("Error", "Run cmd in the admin mode and then try again!\nDeselect the option to prevent this popup to show again.")
50+
51+
except (FileNotFoundError, NameError):
52+
tk.messagebox.showinfo("Error", "Functionality not supported in your OS!\nDeselect the option to prevent this popup to show again.")
53+
54+
55+
def remove_websites():
56+
"""
57+
The function will unblock the block_list websites by opening the file
58+
and removing the changes we made before
59+
"""
60+
try:
61+
with open(host_path, "r+") as file:
62+
content = file.readlines()
63+
file.seek(0)
64+
for lines in content:
65+
if not any(website in lines for website in block_list):
66+
file.write(lines)
67+
file.truncate()
68+
except:
69+
pass
70+
finally:
71+
pass
72+
73+
74+
def high_focus():
75+
global enable
76+
if enable.get() == 1:
77+
block_websites()
78+
else:
79+
remove_websites()
80+
81+
82+
def break_timer():
83+
global popup_2
84+
popup_2 = tk.Toplevel(root)
85+
popup_2.title("Break Timer!")
86+
popup_2.geometry("370x120")
87+
round = 0
88+
89+
try:
90+
t = 5*60
91+
while t>-1:
92+
minute_count = t // 60
93+
second_count = t % 60
94+
timer = '{:02d}:{:02d}'.format(minute_count, second_count)
95+
time_display = tk.Label(popup_2, text = timer, bg = 'DodgerBlue4', fg = 'white', font = ('STIX', 90, 'bold'))
96+
time_display.place(x=0,y=0)
97+
popup_2.update()
98+
time.sleep(1)
99+
t -= 1
100+
except:
101+
pass
102+
103+
pygame.mixer.music.load("beep.wav")
104+
pygame.mixer.music.play(loops=0)
105+
106+
if t == -1:
107+
tk.messagebox.showinfo("Time's up!", "Break is over!\nTime to get to work!")
108+
popup_2.destroy()
109+
global break_count
110+
break_count += 1
111+
112+
113+
def show_report():
114+
global popup_3
115+
popup_3 = tk.Toplevel(root)
116+
popup_3.title("Report")
117+
popup_3.geometry("370x170")
118+
popup_3.config( bg = 'DodgerBlue4')
119+
120+
pomo_time = str(timedelta(minutes=pomo_count*25))[:-3]
121+
break_time = str(timedelta(minutes=pomo_count*5))[:-3]
122+
tk.Label(popup_3, text=f"Number of Pomodoros completed: {pomo_count}", justify=tk.LEFT, bg = 'DodgerBlue4', fg = 'white', font=('Arial',12,'bold')).place(x = 10, y = 10)
123+
tk.Label(popup_3, text=f"Number of breaks completed: {break_count}", justify=tk.LEFT, bg = 'DodgerBlue4', fg = 'white', font=('Arial',12,'bold')).place(x = 10, y = 50)
124+
tk.Label(popup_3, text=f"Hours of work done: {pomo_time} hrs", justify=tk.LEFT, bg = 'DodgerBlue4', fg = 'white', font=('Arial',12,'bold')).place(x = 10, y = 90)
125+
tk.Label(popup_3, text=f"Hours of break taken: {break_time} hrs", justify=tk.LEFT, bg = 'DodgerBlue4', fg = 'white', font=('Arial',12,'bold')).place(x = 10, y = 130)
126+
127+
128+
def pomodoro_timer():
129+
global popup_1
130+
popup_1 = tk.Toplevel(root)
131+
popup_1.title("Work Timer!")
132+
popup_1.geometry("370x120")
133+
round = 0
134+
135+
try:
136+
t = 25*60
137+
while t>-1:
138+
minute_count = t // 60
139+
second_count = t % 60
140+
timer = '{:02d}:{:02d}'.format(minute_count, second_count)
141+
time_display = tk.Label(popup_1, text = timer, bg = 'DodgerBlue4', fg = 'white', font = ('STIX', 90, 'bold'))
142+
time_display.place(x=0,y=0)
143+
popup_1.update()
144+
time.sleep(1)
145+
t -= 1
146+
except:
147+
pass
148+
149+
pygame.mixer.music.load("beep.wav")
150+
pygame.mixer.music.play(loops=1)
151+
152+
if t == -1:
153+
tk.messagebox.showinfo("Time's up!", "Pomodoro completed successfully!\nYou deserve a break!")
154+
popup_1.destroy()
155+
global pomo_count
156+
pomo_count += 1
157+
158+
159+
def main():
160+
global root
161+
root = tk.Tk()
162+
root.title('Timer')
163+
root.geometry('470x608')
164+
165+
bg = tk.PhotoImage(file = "bg.png")
166+
167+
# Show image using label
168+
label1 = tk.Label( root, image = bg)
169+
label1.place(x = 0, y = 0)
170+
171+
global count
172+
173+
intro1 = tk.Label(root, text = 'POMODORO TIMER', bg = 'snow', fg = 'maroon', font = ('Arial', 25, 'bold'))
174+
intro1.place(x=100, y=120)
175+
176+
global enable
177+
enable = tk.IntVar()
178+
check = tk.Checkbutton(root, text = 'Enable website blocker', variable = enable, font = ('Arial', 12, 'bold'), bg='gold', activebackground='yellow', height = 1, width = 25, onvalue=1, offvalue=0, command=high_focus)
179+
check.place(x=100, y=190)
180+
181+
start_btn = tk.Button(root, text = 'START WORK TIMER', command = pomodoro_timer, font = ('Arial', 12, 'bold'), bg='gold', activebackground='yellow', height = 3, width = 25)
182+
start_btn.place(x=100, y=250)
183+
184+
break_btn = tk.Button(root, text = 'START BREAK TIMER', command = break_timer, font = ('Arial', 12, 'bold'), bg='gold', activebackground='yellow', height = 3, width = 25)
185+
break_btn.place(x=100, y=350)
186+
187+
report_btn = tk.Button(root, text = 'SHOW REPORT', command = show_report, font = ('Arial', 12, 'bold'), bg='gold', activebackground='yellow', height = 3, width = 25)
188+
report_btn.place(x=100, y=450)
189+
190+
root.mainloop()
191+
192+
193+
if __name__ == '__main__':
194+
main()
195+

‎Pomodoro_GUI/README.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Pomodoro Clock with GUI
2+
3+
- The given python script creates your very own pomodoro timer/tomato clock with a user friendly GUI.
4+
- A pomodoro clock is a scientifically proven productivity timer dividing your work in time intervals of 25 minutes of high-focus period and a 5 minutes break interval.
5+
6+
## Intalling requirements:
7+
8+
```sh
9+
$ pip install -r requirements.txt
10+
```
11+
12+
## Running the script:
13+
14+
```sh
15+
$ python Pomodoro_GUI.py
16+
```
17+
18+
## Working:
19+
![GIF](https://media.giphy.com/media/Z8k8V5FRALLMLKsOpJ/giphy.gif)
20+
21+
22+
## Author:
23+
[Rohini Rao](https://github.com/RohiniRG)
24+

‎Pomodoro_GUI/beep.mp3‎

11.5 KB
Binary file not shown.

‎Pomodoro_GUI/bg.png‎

107 KB
Loading[フレーム]

‎Pomodoro_GUI/requirements.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pygame==2.0.1
2+
tkinter==8.6

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /