Code
focus.py
import tkinter
import matplotlib.pyplot as plt
from matplotlib.colors import rgb2hex
import time
import sched
cmap = plt.get_cmap("jet")
def score_to_rgb(score):
return rgb2hex(cmap(1-score/10))
pad_font=(None, 70)
main_font=(None, 13)
text_di={'title':'title','x':'x axis', 'y':'y axis'}
mins=30
current_target=None
target_text=None
main = tkinter.Tk()
main.geometry("500x500")
hist_scores=[]
ninekeys='789456123'
pad_text="{} {} {}\n{} {} {}\n{} {} {}".format(*[s for s in ninekeys])
key_to_n={k:v for k, v in zip([s for s in ninekeys], [3,4,5,2,3,4,1,2,3])}
label_title=tkinter.Label(master=main, font=main_font, text=text_di['title'])
label_y = tkinter.Label(master=main, font=main_font, justify='left', anchor="w", text=text_di['y'])
label_pad = tkinter.Label(master=main, font=pad_font, text=pad_text)
label_x = tkinter.Label(master=main, font=main_font, justify='right', anchor="e", text=text_di['x'])
label_setting = tkinter.Label(master=main, font=main_font, text='pop up every {} mins'.format(str(mins)))
label_title.place(relx=0.05, rely=0)
label_y.place(relx=0.05, rely=0.05)
label_pad.place(relx=0.1, rely=0.1)
label_x.place(relx=0.15, rely=0.8)
label_setting.place(relx=0.2, rely=0.9)
def text_pad_reset():
label_pad["text"]=pad_text
main.deiconify()
label_pad.focus_set()
def input_key(event):
key_name = event.keysym
if key_name in [s for s in ninekeys]:
score=key_to_n[key_name]
hist_scores.append(score)
avg_score=sum(hist_scores[-5:])/len(hist_scores[-5:])
event.widget["bg"]=score_to_rgb(score)
event.widget["text"]='{}:{}\navg:{:.2f}'.format(key_name,score,avg_score)
main.configure(bg=score_to_rgb(avg_score))
label_pad.after(300, main.withdraw)
label_pad.after(2000, text_pad_reset)
def when_click(event):
popupwin(event)
def close_win(top, entry, event):
event.widget["text"]=entry.get()
top.destroy()
def popupwin(event):
top= tkinter.Toplevel(main)
top.geometry("750x100")
entry= tkinter.Entry(top, width= 25)
entry.pack()
button= tkinter.Button(top, text="OK", command=lambda:close_win(top, entry, event))
button.pack(pady=5, side= tkinter.TOP)
def close_win_mins(top, entry, event):
global mins
mins=int(entry.get())
event.widget["text"]='pop up every {} mins'.format(str(mins))
top.destroy()
def popupwin_mins(event):
top= tkinter.Toplevel(main)
top.geometry("750x100")
entry= tkinter.Entry(top, width= 25)
entry.pack()
button= tkinter.Button(top, text="OK", command=lambda:close_win_mins(top, entry, event))
button.pack(pady=5, side= tkinter.TOP)
def when_click_mins(event):
popupwin_mins(event)
def on_closing():
main.destroy()
label_pad.bind("<KeyPress>", input_key)
label_title.bind("<Button>", when_click)
label_y.bind("<Button>", when_click)
label_x.bind("<Button>", when_click)
label_setting.bind("<Button>", when_click_mins)
main.protocol("WM_DELETE_WINDOW", on_closing)
main.attributes("-topmost", True)
label_pad.focus_set()
main.mainloop()