# Suivant que l'on exécute ce script sous Python 3 ou Python 2, # on utilisera le module Tkinter correspondant : try: from tkinter import * # module Tkinter pour Python 3 except: from Tkinter import * # module Tkinter pour Python 2 import time class Chronometre(Frame): """ insertion du chrnomètre dans un widget frame. """ def __init__(self, parent=None, **kw): Frame.__init__(self, parent, kw) self._start = 0.0 self._elapsedtime = 0.0 self._running = 0 self.timestr = StringVar() self.makeWidgets() def makeWidgets(self): """ Make the time label. """ l = Label(self, textvariable=self.timestr,font=("DS-Digital",100), bg='black',fg='red') self._setTime(self._elapsedtime) l.pack(fill=X, expand=NO, pady=5, padx=5) def _update(self): """ Update the label with elapsed time. """ self._elapsedtime = time.time() - self._start self._setTime(self._elapsedtime) self._timer = self.after(50, self._update) def _setTime(self, elap): """ Set the time string to Minutes:Seconds:Hundreths """ minutes = int(elap/60) seconds = int(elap - minutes*60.0) hseconds = int((elap - minutes*60.0 - seconds)*100) self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds)) def Start(self): """ Marche du chrono si arrêt. """ if not self._running: self._start = time.time() - self._elapsedtime self._update() self._running = 1 def Stop(self): """ Arrêt du chrono si en marche. """ if self._running: self.after_cancel(self._timer) self._elapsedtime = time.time() - self._start self._setTime(self._elapsedtime) self._running = 0 def Reset(self): """ Raz du chrono. """ self._start = time.time() self._elapsedtime = 0.0 self._setTime(self._elapsedtime) def get(self) : return self._running def masw(Event,sw): if sw.get() : sw.Stop() print ('stop') else: sw.Start() print ('start') def main(): root = Tk() sw = Chronometre(root) sw.pack(side=TOP) 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("",lambda Event=Event, sw=sw :masw(Event,sw)) root.mainloop() if __name__ == '__main__': main()