Created
May 18, 2021 21:02
-
-
Save derekmc/2c3841cae18d6d60facc59249e37b158 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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