Oct-23-2020, 10:41 PM
(Oct-21-2020, 03:08 PM)joe_momma Wrote: here's my attempt:
from tkinter import * import logging, sys from time import strftime as s_time, localtime as l_time, time logging.basicConfig(level= logging.DEBUG) #logging.disable(logging.CRITICAL) class Long_Key_Press(Frame): def __init__(self, parent=None, HOLD_TIME=10): self.parent= parent self.HOLD_TIME= HOLD_TIME Frame.__init__(self, self.parent) self.pack(expand=YES, fill=BOTH) self.canvas= Canvas(self) self.canvas.config(width= 500, height= 700, bg='skyblue') self.canvas.pack(expand=YES, fill=BOTH) self.btn= Button(self.canvas, text='QUIT', command= self.get_entry) self.btn.place(x=400,y=600) self.time_txt= StringVar() self.lbl_1= Label(self.canvas, textvariable= self.time_txt, font=('arial',25,'bold')) self.lbl_1.place(x=20,y=50) self.output_lbl= StringVar() self.lbl_2= Label(self.canvas, textvariable= self.output_lbl, font=('arial',25,'bold')) self.lbl_2.place(x=20,y=200) self.output_lbl.set('Hold left mouse down') self.bind_all('<Key>', self.key) self.canvas.bind('<Button-1>', self.left_mouse_down) self.canvas.bind('<ButtonRelease-1>', self.left_mouse_up) self.time_elapsed= 0.0 self.counter= 0 self.g_count=0 def set_timer(self,elapsed): self.minutes= int(elapsed/60) self.seconds= int(elapsed- self.minutes*60.0) self.hseconds= int((elapsed- self.minutes*60.0 - self.seconds)*100) self.time_txt.set('%02d:%02d:%02d'%(self.minutes, self.seconds, self.hseconds)) def update_time(self): self.time_elapsed= time() - self.start self.set_timer(self.time_elapsed) if self.seconds == self.HOLD_TIME * .25: self.output_lbl.set('Quarter way there...') elif self.seconds == self.HOLD_TIME * .5: self.output_lbl.set('Half way there...') elif self.seconds == self.HOLD_TIME * .75: self.output_lbl.set("3/4 the to finish...") elif self.seconds >= self.HOLD_TIME: self.output_lbl.set('One second longer....') self._timer= self.after(50, self.update_time) def left_mouse_down(self, event): x,y= event.x, event.y self.start= time() - self.time_elapsed self.update_time() def left_mouse_up(self, event): self.after_cancel(self._timer) self.time_elapsed= 0.0 if self.seconds > self.HOLD_TIME: self.output_lbl.set("That is long enough.") self.canvas.config(bg='lime') else: self.output_lbl.set("Longer hold is required.") self.canvas.config(bg='red') def key(self, event): self.g_count +=1 message= 'count:{0} key:{1} num:{2} state:{3}'.format(self.g_count, event.keysym,event.keysym_num, event.state) logging.debug(message) def get_entry(self): self.parent.destroy() if __name__ == '__main__': root= Tk() Long_Key_Press(root, HOLD_TIME=20) root.mainloop()
That's works but almost!... not for me. I really thankful for this.