
Bij de liefhebbers van escaperooms leeft de wens om meer spanning in de 'ontsnapping' aan te brengen. Daarom laat ik deze keer zien hoe je een stopwatch maakt met behulp van de combinatie Python en Tkinter. De stopwatch is schermvullend bij een 1920 x 1080 scherm (FullHD 16:9). Mocht je scherm een ander formaat hebben, dan kun je het script zelf aanpassen.
We hebben Tkinter nodig!
Om de grafische output op een volledig scherm te tonen is Tkinter nodig. Deze bevindt zich standaard in de laatste versie van het Raspberry Pi OS. Je kunt dit controleren door in de desktop naar Voorkeuren te gaan en vervolgens naar Add / Remove Software. Type hier vervolgens ‘Tkinter‘ in. Als het goed is zie je een vinkje bij Tkinter staan.

Heb je een andere versie van het OS of zie je Tkinter er niet bij staan om aan te vinken, installeer dan Tkinter vanaf de prompt in de terminal met:
sudo apt-get install python-tk python3-tk
Om te zien of Tkinter goed geïnstalleerd is, gebruik je in Python het twee-regel script:
import tkinter
tkinter._test()
Als het goed geïnstalleerd is, zie je in de desktop van de Pi een venster verschijnen zoals hieronder.

Laatste updates
Ik ga ervan uit dat je Raspberry Pi ‘schoon’ is en dat de pakketten van de laatste updates en upgrades voorzien zijn. Zo niet, voer dan de volgende opdrachten in de terminal in.
sudo apt-get update
sudo apt-get upgrade
Aan de slag!
Stap 1. Bibliotheken importeren en variabelen initialiseren
Om een timer in Python te maken importeren we eerst het Tkinter-pakket. Om system-specifieke parameters en functies te kunnen gebruiken importeren we sys en de time-module om een tijd te verkrijgen. De telling declareren we als globaal en zetten de variabele op nul.
from tkinter import *
import sys
import time
global count
count = 0
Stap 2. Stopwatchklasse
We maken een klasse (class) genaamd stopwatch. In deze klasse maken we een functie om een reset-actie uit te kunnen voeren. Deze functie reset de timing naar 00:00:00, vergelijkbaar met het herstarten van de stopwatch.
class stopwatch():
def reset(self):
global count
count=1
self.t.set('00:00:00') # stand na reset
Stap 3. Startmethode voor stopwatch met behulp van Python
Om de stopwatch te starten wordt een functie met de naam start gemaakt. Deze functie wordt gebruikt voor het starten van de stopwatch.
def start(self):
global count
count=0
self.timer()
Stap 4. Stopmethode
Om de stopwatch te stoppen hebben we een stop-functie nodig. We maken een functie die wordt aangeroepen om te stoppen.
def stop(self):
global count
count=1
Stap 5. Methode sluiten
Het is handig om bij schermtoepassingen altijd een exit-knop toe te voegen. Om de exit-procedure uit te voeren maken we een functie genaamd ‘close‘. Wanneer we in de toepassing op de exit-knop klikken wordt de toepassing afgesloten.
def close(self):
self.root.destroy()
Stap 6. Maak de timermethode aan
Om de stopwatch te laten lopen maken we een functie met de naam timer aan. Wanneer het programma de functie self.timer() ziet, roept het deze functie aan en voert het de taak uit die is gespecificeerd in de timerfunctie.
def timer(self):
global count
if(count==0):
self.d = str(self.t.get())
h,m,s = map(int,self.d.split(":"))
h = int(h)
m=int(m)
s= int(s)
if(s<59):
s+=1
elif(s==59):
s=0
if(m<59):
m+=1
elif(m==59):
m=0
h+=1
if(h<10):
h = str(0)+str(h)
else:
h= str(h)
if(m<10):
m = str(0)+str(m)
else:
m = str(m)
if(s<10):
s=str(0)+str(s)
else:
s=str(s)
self.d=h+":"+m+":"+s
self.t.set(self.d)
if(count==0):
self.root.after(1000,self.timer)
Stap 7. De init-methode voor Stopwatch maken met behulp van Python
We voegen een init-functie toe aan dit programma, evenals een knop voor elke bewerking. Feitelijk zijn dit de Tkinter-functies om de toepassing mooi op het scherm te tonen. Om het schermformaat, de opmaak, het font en de kleuren van de stopwatch aan te passen, kun je de instellingen hieronder veranderen.
def __init__(self):
self.root=Tk()
self.root.title("Stopwatch - Powered bij Raspberry Pi - Adapted by Picademie.nl")
self.root.attributes("-fullscreen", True)
self.root.configure(background='black')
self.root.geometry("600x200")
self.t = StringVar()
self.t.set("00:00:00")
# Tekst en achtergrond kleuren
# Klok
self.lb = Label(self.root,textvariable=self.t,font=("Helvetica 250 bold"), foreground="red", bg="black", justify="center")
# Knoppen
self.bt1 = Button(self.root,text="Start",command=self.start,font=("Helvetica 20 bold"),bg=("white"))
self.bt2 = Button(self.root,text="Stop",command=self.stop,font=("Helvetica 20 bold"),bg=("white"))
self.bt3 = Button(self.root,text="Reset",command=self.reset,font=("Helvetica 20 bold"),bg=("white"))
self.bt4 = Button(self.root, text="Exit", command=self.close,font=("Helvetica 20 bold"),bg=("white"))
# Positie van klok en knoppen
# Klok
self.lb.place(x=300,y=375)
# Knoppen
self.bt1.place(x=620,y=800)
self.bt2.place(x=820,y=800)
self.bt3.place(x=1020,y=800)
self.bt4.place(x=1220,y=800)
self.root.mainloop()
a=stopwatch()
Stap 8. Bestand downloaden
Stap 9. Stopwatch opstarten
Omdat we gebruik maken van Tkinter heb je het grafische scherm van de Raspberry Pi nodig. Daarom start je het bestand in de terminal van de Raspberry Pi op, dus niet via SSH, met VNC lukt dit wel!
Wil je weten hoe je VNC installeert? Kijk dan hier.
Het script wordt opgestart met de opdracht:
python stopwatch.py
Have A Nice Day!
Dat ziet er leuk uit! Ik denk dat je heel veel escaperoom bouwers hier blij mee maakt en ondersteunt
Raspberry PI wordt naast Arduino en mini plc’s veel toegepast in de escaperoom wereld.