Skip to content

Instantly share code, notes, and snippets.

@0xKD
Last active January 15, 2021 09:14
Show Gist options
  • Save 0xKD/c6fabaa74cd285d5af09b5c9467186e4 to your computer and use it in GitHub Desktop.
Save 0xKD/c6fabaa74cd285d5af09b5c9467186e4 to your computer and use it in GitHub Desktop.
from Tkinter import *
import time
class StopWatch(Frame):
msec = 10
def __init__(self,parent=None,**kw):
Frame.__init__(self, parent, **kw)
self._parent = parent
self._start = 0.0
self._elapsedtime = 0.0
self._running = False
self.timestr = StringVar()
self.makeWidgets()
def makeWidgets(self):
l = Label(self, textvariable=self.timestr,
height=2,font=("Digital-7 Mono", 48),fg="yellow", bg="black")
self._setTime(self._elapsedtime)
# l.pack(fill=X,expand=NO, pady=2, padx=2)
l.pack(fill=BOTH,expand=TRUE)
def _update(self):
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._timer = self.after(self.msec, self._update)
def _setTime(self,elap):
minutes = int(elap/60)
seconds = int(elap - minutes*60.0)
hseconds = int((elap - minutes*60.0 -seconds)*100) // 10
self.timestr.set(' %02d:%02d:%02d ' % (minutes, seconds, hseconds))
def Start(self):
if not self._running:
self._start = time.time() - self._elapsedtime
self._update()
self._running = True
self.stay_on_top(val="true")
def Stop(self):
if self._running:
self.after_cancel(self._timer)
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._running = False
self.stay_on_top(val="false")
def Reset(self):
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
self.stay_on_top(val="false")
def stay_on_top(self, val="true"):
# topLevelWindow = Toplevel(self)
# Make topLevelWindow remain on top until destroyed, or attribute changes.
self._parent.attributes('-topmost', val)
if __name__ == '__main__':
def main():
root = Tk()
sw = StopWatch(root)
# sw.pack(side=TOP)
sw.pack(side=TOP, fill=BOTH, expand=True)
# Button(root,text='Start',command=sw.Start).pack(side=LEFT)
# Button(root,text='Stop',command=sw.Stop).pack(side=LEFT)
# Button(root,text='Reset',command=sw.Reset).pack(side=LEFT)
# Button(root,text='Quit',command=root.quit).pack(side=LEFT)
root.bind("<KP_1>", lambda x: sw.Start())
root.bind("<KP_9>", lambda x: sw.Stop())
root.mainloop()
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment