From 499944159f83d02fbdd17dfd15b17ff992f5f2eb Mon Sep 17 00:00:00 2001 From: tTh Date: Fri, 11 Dec 2020 15:07:40 +0100 Subject: [PATCH] beurk beurk --- chap/Python.tex | 30 ++++++++++++++++ chap/chronometre.png | Bin 0 -> 8846 bytes code/chronometre.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 chap/Python.tex create mode 100644 chap/chronometre.png create mode 100755 code/chronometre.py diff --git a/chap/Python.tex b/chap/Python.tex new file mode 100644 index 0000000..c1e4ee0 --- /dev/null +++ b/chap/Python.tex @@ -0,0 +1,30 @@ +\chapter{Python} \label{chap:Python} \index{Python} + + + +\section{Pourquoi je n'aime pas Python} + +Depuis des lustres, autour de moi, je vois de plus en plus de +gens faire du code en Python, +certains même font de choses très avancées. +Et beaucoup de ces gens essayent de me convaincre que c'est +un langage vraiment trop bien, trop moderne, trop dans la +\textit{vibe} du devops, battery included, toussa. +Quelques uns d'entre eux vont même jusqu'à me parler d'un +certain \textbf{canard} qui faciliterait bien la vie +des preogrammeurs. + +Je ne suis pas convaincu. + + + +\section{Mais quand même...} + +\begin{figure}[h] + \begin{center} + \includegraphics[scale=0.75]{chap/chronometre} + \caption{Chronometre} + \end{center} +\end{figure} + + diff --git a/chap/chronometre.png b/chap/chronometre.png new file mode 100644 index 0000000000000000000000000000000000000000..8465147c24c11250b0f57b7e7d90acc1c3390fa1 GIT binary patch literal 8846 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 literal 0 HcmV?d00001 diff --git a/code/chronometre.py b/code/chronometre.py new file mode 100755 index 0000000..b166b50 --- /dev/null +++ b/code/chronometre.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +from Tkinter import * +import time, math + +class StopWatch(Frame): + """ Implement a stopwatch frame widget """ + msec = 420 + def __init__(self, parent=None, **kw): + Frame.__init__(self, parent, kw) + self._start = 0.0 + self._elapsed = 0.0 + self._running = False + self.timestr = StringVar() + self.makeWidgets() + + def makeWidgets(self): + l = Label(self, textvariable=self.timestr, + font = "Helvetica 36 bold", + bg = "Grey20", fg = "Yellow", + padx = 30, pady = 30) + self._setTime(self._elapsed) + l.pack(fill=X, expand=YES, pady=0, padx=0) + + def _update(self): + self._elapsed = time.time() - self._start + self._setTime(self._elapsed) + self._timer = self.after(self.msec, self._update) + + def _setTime(self, elap): + minutes = int(elap/60) + seconds = int(elap - (minutes*60.0)) + fl = math.floor(elap) + hseconds = int((elap - fl)*100) + self.timestr.set('%03dm%02d.%02d' % \ + (minutes, seconds, hseconds)) + def Start(self): + if not self._running: + self._start = time.time() - self._elapsed + self._update() + self._running = True + def Stop(self): + if self._running: + self.after_cancel(self._timer) + self._elapsed = time.time() - self._start + self._setTime(self._elapsed) + self._running = False + def Reset(self): + """ reset the stopwath to 000m00.00 """ + self._start = time.time() + self._elapsed = 0.0 + self._setTime(self._elapsed) + def Dump(self): + """ Display internals variables """ + print "start = ", self._start + print "elapsed = ", self._elapsed + print "refresh = ", self.msec + print "running = ", self._running + # print "timestr = ", self.timestr + def About(self): + print "A kludge by tTh" + +# -------------------------------------------------------------------- + +if __name__ == '__main__': + def main(): + root = Tk() + root.title("Chronometre") + sw = StopWatch(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='Dump', command=sw.Dump).pack(side=LEFT) + Button(root, text='Quit', command=root.quit).pack(side=LEFT) + root.mainloop() + + main() +