Používateľské rozhranie v grafickom režime vyžaduje niekoľko objektov, pomocou ktorých môže používateľ program ovládať. Najpoužívanejšie sú:
- tlačítko (Button)
- vstupné pole (Entry)
- návestie (Label)
Ich konkrétne použitie si ukážeme pri programovaní matematickej hry Taxman.
Taxman
Pravidlá hry:
- Hráč zvolí číslo n z rozsahu od 10 do 300.
- Na obrazovku sa vypíše zoznam čísel v hre.
- Hráč si z tohto zoznamu zvolí číslo, ktoré má v zozname aspoň jedného deliteľa.
- Počítač vezme všetky delitele čísla vybraného hráčom.
- Ak v zozname čísel je číslo, ktoré má v zozname deliteľa, opakujú sa kroky 2 až 4
- Ak v zozname už nie je číslo, ktoré má v zozname deliteľa, zostávajúce čísla vezme počítač.
- Vyhráva hráč, ktorého súčet čísel je väčší.
Ukážka hry:
Hráč zvolil číslo 10. Vypíšu sa čísla: 1 2 3 4 5 6 7 8 9 10
Hráč vezme číslo 3. Počítač si vezme číslo 1. Vypíšu sa čísla: 2 4 5 6 7 8 9 10. Stav je: 3:1
Hráč vezme číslo 6. Počítač vezme číslo 2. Vypíšu sa čísla: 4 5 7 8 9 10. Stav je: 9:3
Hráč vezme číslo 8. Počítač vezme číslo 4. Vypíšu sa čísla: 5 7 9 10. Stav je: 17:7
Hráč vezme číslo 10. Počítač vezme číslo 5. Vypíšu sa čísla: 7 9 . Stav je: 27:7
Tieto čísla už nemajú deliteľa, vezme ich počítač. Výsledný stav je: 27:31. Vyhral počítač.
Vytvorenie programu
Krok 1: Voľba rozsahu čísel. Vytvorenie zoznamu čísel.
Vytvoríme plátno, na ktoré sa bude vypisovať skóre, zoznam čísel a kam sa umiestnia ovládacie prvky:
import tkinter platno = tkinter.Canvas(width=1000,height=600,bg="skyblue") platno.pack()
Potrebujeme ovládací prvok, cez ktorý zadáme číslo n. Takýmto prvkom je vstupné pole (Entry). Príkaz má v najjednoduchšom prípade tvar:
e=tkinter.Entry()
Môže mať okrem iných nasledujúce parametre:
- prvý parameter okno v ktorom sa má vstupné pole zobraziť
- width – aká je šírka vstupného poľa
- font – typ a druh fontu
- command – príkaz, ktorý sa má vykonať, ak používateľ zmení vstupnú hodnotu
Na načítanie hodnoty zadanej v Entry slúži metóda e.get(). Príkaz Entry nemá text, ktorý by používateľa navigoval, čo sa doň má vložiť. Na inštruktáž používateľa slúži prvok Návestie (Label). Label vlastne nie je ovládacím prvkom, kliknutím naň sa nič nevykoná, slúži len na oznamy používateľovi.
Príkaz Label má tvar:
l=tkinter.Label(text=’xyz‘)
Ďalšie atribúty sú:
- font
- fill
- a iné
Keď sme do vstupného poľa čosi vložili, programu povieme aby vstupnú hodnotu spracoval, pomocou ovládacieho prvku Tlačítko (Button).
Príkaz Button má základný tvar:
b=tkinter.Button(text=’xyy‘,command=príkaz)
- text – aký text sa má na tlačítku vypísať
- command – aký príkaz sa má vykonať, keď klikneme na tlačítko.
- font – druh fontu
- bg – farba tlačítka
- a iné
Vytvorenie počiatočného stavu urobme vo funkcii init:
def init(): global skore,cisla,e1 skore=[0,0] cisla=[] n=int(e1.get()) for i in range(1,n+1): cisla.append(i) zobraz()
- skore – stav hry, prvá hodnota je skóre hráča, druhá skóre počítača
- cisla – zoznam čísel v hre
- e1 – vstupné pole
- n – rozsah čísel
- cisla – zoznam čísel, ktoré sú v hre
- append – metóda, ktorou sa pridá nový prvok na koniec zoznamu.
- zobraz – funkcia, ktorou zobrazíme stav hry a aktuálny zoznam čísel
Ak chceme vložiť nejakú preddefinovanú hodnotu do Entry, použijeme metódu e.insert(0,hodnota)
Aby použivateľ vedel čo má do Entry vložiť, použijeme príkaz Label. Je to návestie, ktoré nič nevykonáva, iba vypíše text, ktorý inštruuje používateľa.
Okrem hrúbky okraja môžeme nastaviť pomocou Entry napríklad počet vrcholov pravidelného mnohouholníka. Podobne môžeme nastaviť aj farbu, ale lepšie bude farbu nastavovať či už pomocou palety alebo farebných tlačidiel.