Skip to content

Instantly share code, notes, and snippets.

@derekmc
Created May 18, 2021 21:02
Show Gist options
  • Save derekmc/2c3841cae18d6d60facc59249e37b158 to your computer and use it in GitHub Desktop.
Save derekmc/2c3841cae18d6d60facc59249e37b158 to your computer and use it in GitHub Desktop.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox, Text
host = "localhost"
port = 8080
class Focus:
def __init__(self, master):
self.master = master
master.title(f"My Server ({host}:{port})")
master.configure(bg = '#eeeeee')
# Set styles for widgets
self.style = ttk.Style()
self.style.configure('TFrame')
self.style.configure('TButton')
#self.style.configure('TLabel', font = ('Monospace', 11))
self.style.configure('TLabel', font = ('Monospace', 11))
self.style.configure('Header.TLabel', font = ('Monospace', 16))
self.style.configure('frame.TLabel', font = ('Arial', 24))
# Create time and state variables
self.state = False
self.minutes = 0
self.seconds = 0
self.bar = 0
self.mins = 0
self.secs = 0
# Build the frame that contains the frame
self.frame = ttk.Frame(master)
self.frame.pack()
self.display = ttk.Label(self.frame, style = 'Header.TLabel')
self.display.grid(row = 0, column = 0, columnspan =2, pady=(5,0))
self.display.config(text= f" My Server\n{host}:{port}")
self.time = ttk.Label(self.frame, style = 'frame.TLabel')
self.time.grid(row = 1, column = 0, columnspan=2, padx=5, pady=(5,0))
self.time.config(text="%02d:%02d:%02d" % (0, self.minutes, self.seconds))
# Create textarea
logvalue = StringVar()
self.logtext = Text(self.frame, width=45, height=16)
self.logtext.insert("1.0", f"Serving on {host}:{port}...")
self.logtext.config(state=DISABLED)
self.logtext.grid(row=2, column =0, columnspan = 1, padx = 25, pady =5)
# Create buttons in a new frame
self.controls = ttk.Frame(master)
self.controls.pack()
self.start = ttk.Button(self.controls, text = 'Start', command = self.start)
self.start.grid(row =3, column=0, padx = 5)
self.start.config(width=10)
self.reset = ttk.Button(self.controls, text = 'Reset', command =self.pause)
self.reset.grid(row =3, column=1, padx = 5, pady=10)
#self.pause.config(state='disabled')
self.reset.config(style = 'TButton')
self.exit = ttk.Button(self.controls, text = 'Exit', command =self.pause)
self.exit.grid(row =3, column=2, padx = 5, pady=10)
#self.pause.config(state='disabled')
self.exit.config(style = 'TButton')
# Define the commands for each button
def start(self):
if self.state == False:
self.state = True
self.display.config(text='Stay Focused')
self.mins = self.minutes
self.secs = self.seconds
self.pause.config(state = 'enabled')
self.reset.config(state = 'enabled')
self.start.config(state='disabled')
self.countdown()
def pause(self):
if self.state == True:
self.state = False
self.display.config(text='Paused.')
self.minutes = self.mins
self.seconds = self.secs
self.start.config(state = 'enabled')
self.pause.config(state='disabled')
def reset(self):
self.minutes = 2
self.seconds = 0
self.time.config(text="%02d:%02d:%02d" % (12, self.minutes, self.seconds))
self.start.config(state = 'enabled')
self.pause.config(state='disabled')
self.state = False
# Define the alert logic
def break_alert(self):
result = messagebox.askquestion("Nice job!", "Need a break?", icon='question')
if result == 'yes':
self.rest()
else:
self.work()
def work_alert(self):
result = messagebox.askquestion("Let's jump back in", "Ready to be productive?", icon='warning')
if result == 'yes':
self.work()
else:
self.minutes = 2
self.time.config(text="%02d:%02d:%02d" % (13,self.minutes, self.seconds))
self.display.config(text= "Ready When You Are")
self.state = False
def work(self):
self.minutes = 2
self.seconds = 0
self.mins = 2
time_left = 0
self.time.config(text="%02d:%02d:%02d" % (14,self.minutes, self.seconds))
self.display.config(text='Stay Focused')
self.countdown()
def rest(self):
self.minutes = 1
self.seconds = 0
self.mins = 1
time_left = 0
self.time.config(text="%02d:%02d:%02d" % (16,self.minutes, self.seconds))
self.start.config(state = 'enabled')
self.display.config(text='Take a quick break')
self.countdown()
# Define the countdown feature
def countdown(self):
if self.state == True:
time_left = 120-60*self.mins-self.secs
# self.progressbar.config(value = time_left)
if (self.mins == 0) and (self.secs == 0) and (self.minutes != 5):
self.mins = 0
self.secs = 0
self.time.config(text="%02d:%02d:%02d" % (1, self.mins, self.secs))
self.break_alert()
elif (self.mins == 0) and (self.secs == 0) and (self.minutes ==5 ):
self.mins = 0
self.secs = 0
self.time.config(text="%02d:%02d:%02d" % (2, self.mins, self.secs))
self.work_alert()
else:
self.time.config(text="%02d:%02d:%02d" % (0, self.mins, self.secs))
if self.secs == 0:
self.mins -= 1
self.secs = 59
else:
self.secs -= 1
self.master.after(1000, self.countdown)
def main():
root = Tk()
focus = Focus(root)
root.mainloop()
if __name__ == "__main__": main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment