Účelem této přílohy je poskytnout úvodní a nutně neúplné informace o navrhování grafických aplikací pomocí Tkinteru. Je to vlastně úvodní kapitola k obsáhlejšímu souboru přeložených textů s příklady: Tkinter Pythonu.
Jednoduché příklady budou čtenáře lákat, aby si je během studia Pythonu příležitostně vyzkoušel, proti čemuž nelze nic namítat. Nutno ale poznamenat, že od grafických objektů se očekává něco víc, než jejich pouhé vykreslení na monitoru.
Jsou to GUI - grafická rozhraní mezí počítačem a uživatelem. Mají sloužit k výměně informací pro navazující programy. Pro tuto úroveň použití je nezbytná poměrně ucelená znalost Pythonu - zejména jeho tříd a objektů.
Předložený text není didakticky komponován. Zaujatý student by se měl zaměřit zejména na řízení událostí a používání kontrolních proměnných. Tento čtenář by také měl částečně umět anglicky aby byl schopen si vyhledat chybějící informace.
Programy Tkinteru je ve Windows nejvýhodnějěí psát a editovat v prostředí Thonny, kde zapsaný skript spustíme tlačítkem nebo klávesnicí F5.
Tkinter (či tkinter pro Python 3) je paket modulů, které obsahují kolekce tříd a metod pro přístup k prvkům Tk.
Tk je knihovna rutin v jazyce C neboli sada nástrojů pro správu oken a událostí, která je součástí Tcl Tcl (Tool Command Language) je jazyk pro manipulaci s prvky Tk. Widget je prvek grafického rozhraní jako je text box, combo box nebo okno nejvyšší úrovně. Od této chvíle mu budeme familiárně říkat piškot. Piškoty jsou hierarchicky uspořádatelné objekty, vytvořené jako instance tříd.Mnohé náležitosti Tkinteru si nejlépe ukážeme na příkladě (hello_1.py)
1 from tkinter import* 2 3 root = Tk() 4 w = Label(root, text="Nazdar světe!") 5 w.pack() 6 7 root.mainloop()
F:\Codetest\Tkinter> python hello_1.py
Tímto prostinkým skriptem vytvoříme okno, které má tři ovládácí prvky a náš popisek "Nazdar světe" :
Jednotlivé řádky skriptu mají tento význam:
Nekonečná smyčka událostí
Zobrazení není statické ale cyklicky se obnovuje tak dlouho, dokud není dalším příkazem ukončeno.
V našem případě ukončí opakované zobrazování okna klik myší na ovládacím prvku s křížkem.
Smyčka
Událostí může být pohyb kurzoru, stisk či uvolnění tlačítka myší nebo klávesnice, změna velikosti okna a také
Focus je stav aktivity, který umožňuje spojení widgetu s událostí klávesnice. V jednom okamžiku může mít focus jen jediný widget (vidíme kolem něho tečkovaný rámeček).
Přesun zaměření z jednoho widgetu na druhý lze provést několika způsoby:
Spojení události s připravenou reakcí piškotu lze realizovat buď prostřednictvím parametru command (jen u některých piškotů) nebo metodou Pozice jednotlivých piškotů a rámečků uvnitř nadřízených kontejnerů se určují pomocí správců geometrie, jež jsou tři:
Správa geometrie
Nejjednodušší je metoda
Při programování grafických prvků se velmi často používají třídy. Ukážeme si trochu rozvinutou variantu předchozí ukázky (hello2.py):
1 from tkinter import* 2 3 classHello : 4 def__init__ (self, master): 5 frame = Frame(master) 6 frame.pack() 7 self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) 8 self.button.pack(side=LEFT) 9 self.hi = Button(frame, text="Nazdar!", command=self.say_hi) 10 self.hi.pack(side=LEFT) 11 defsay_hi (self): print("Nazdárek Kašpárek") 12 root = Tk() 13 app = Hello(root) 14 root.mainloop()
C:\CodeTest\tk-py> python33 hello.py Nazdárek Kašpárek
Vytvořili jsme okno se dvěma tlačítky. Jedním způsobíme tisk oslovení "Nazdárek Kašpárek" v okně konzoly, druhým okno zavřeme:
Jednotlivé řádky skriptu mají tento význam:
Při deklaraci tlačítek
Projdeme-li skriptem od shora dolů, uvědomíme si, že kromě importu na prvním řádku začíná výpočet na řádku 12 vytvořením nejvýše postaveného okna
Tento argument použije konstruktor třídy
Nabízí se otázka, k čemu vlastně potřebujeme deklarovat piškot
Piškot
Více se dozvíte v navazujícím textu: Tkinter Pythonu.