Naslednji primer GUI programa bo preprosta štoparica. S pomočjo štoparice bomo prikazali delovanje oziroma uporabo več gumbov. Uporabili bomo tri gumbe, s katerimi bomo zagnali štoparico, jo ustavili ali ponastavili, t.j. nastavili na začetno vrednost.
Da bo vse skupaj bolj zanimivo, bo štoparica prikazovala čas do desetinke sekunde natančno. Vsakič, ko bomo štoparico ustavili, se bo povečal števec, ki bo štel skupno število ustavitev. Poleg tega bomo šteli še ustavitve, ko nam bo štoparico uspelo ustaviti do sekunde natančno – to pomeni, da bo desetinka sekunde enaka 0.
Ta program bo služil tudi kot zgled, kako v programu uporabljamo merilce časa (ang. timers) in knjižnico time
.
Izgled GUI vmesnika našega programa bo podoben spodnjemu modelu.
1 # encoding: utf-8 2 import tkinter as tk 3 4 # Definicija globalnih spremenljivk 5 cas10 = 0 # število desetink sekunde 6 celih = 0 # poizkusi, ustavljeni na celo sekundo 7 skupaj = 0 # vsi poizkusi 8 stevec = 0 9 10 # Pomožna funkcija, ki pretvori čas v desetinke 11 # sekunde in oblikuje izpis v obliko A:BC.D 12 def oblikuj_cas(t): 13 D = t % 10 14 E = t // 10 15 A = E // 60 16 S = E % 60 17 B = S // 10 18 C = S % 10 19 return str(A) + ":" + str(B) + str(C) + "." + str(D) 20 21 # Določi časovni rokovalnik za števec z intervalom 22 # 100 milisekund (desetinka sekunde) 23 def casovni_rokovalnik(): 24 global cas10, stevec 25 # Ponastavi čas, ko doseže 10 minut 26 if (cas10 == 5999): 27 cas10 = 0 28 else: 29 cas10 = cas10 + 1 30 if stevec: 31 narisi() 32 okvir.after(100, casovni_rokovalnik) 33 34 # Določi rokovalnik za risanje na platno 35 def narisi(): 36 # Izbriši vsebino platna 37 platno.delete("all") 38 # Na novo napiši besedilo 39 niz1 = str(celih) + "/" + str(skupaj) 40 niz2 = oblikuj_cas(cas10) 41 platno.create_text(160, 30, fill="white", text=niz1, \ 42 font=("Times", 18)) 43 platno.create_text(100, 100, fill="white", text=niz2, \ 44 font=("Times", 36)) 45 46 # Določi rokovalnik gumba 'Začni' 47 def zacni(): 48 global stevec 49 stevec = 1 # Začni ali nadaljuj štopanje 50 casovni_rokovalnik() 51 52 # Določi rokovalnik gumba 'Ustavi' 53 def ustavi(): 54 global cas10, celih, skupaj, stevec 55 if stevec: 56 stevec = 0 # Ustavi štopanje 57 # Posodobi števec vseh poizkusov 58 skupaj = skupaj + 1 59 # Posodobi števec celih poizkusov 60 if (cas10 % 10 == 0): 61 celih = celih + 1 62 narisi() 63 64 # Določi rokovalnik gumba 'Nastavi' 65 def nastavi(): 66 global cas10, celih, skupaj, stevec 67 cas10 = 0 68 celih = 0 69 skupaj = 0 70 stevec = 0 71 narisi() 72 73 # Ustvari okno, okvir in platno 74 okno = tk.Tk() 75 okno.title("Štoparica") 76 okno.geometry("400x250") 77 78 okvir = tk.Frame(okno) 79 okvir.grid(row=0, column=0, pady=20) 80 81 platno = tk.Canvas(okno, width=200, height=200, bg="black") 82 platno.grid(row=0, column=1, pady=20) 83 84 platno.create_text(160, 30, fill="white", text="0/0", \ 85 font=("Times", 18)) 86 platno.create_text(100, 100, fill="white", text="0:00.0", \ 87 font=("Times", 36)) 88 89 # Poveži funkcije z dogodkovnimi rokovalniki 90 gumb1 = tk.Button(okvir, text="Začni", command=zacni) 91 gumb1.configure(width=10) 92 gumb1.grid(row=0, column=0, padx=45) 93 gumb2 = tk.Button(okvir, text="Ustavi", command=ustavi) 94 gumb2.configure(width=10) 95 gumb2.grid(row=1, column=0, padx=45) 96 gumb3 = tk.Button(okvir, text="Nastavi", command=nastavi) 97 gumb3.configure(width=10) 98 gumb3.grid(row=2, column=0, padx=45) 99 100 # Zaženi dogodkovno zanko 101 okno.mainloop() 102