Lekce 4 - Aplikace Kalkulačka v tkinter - Sestavení projektu
V předchozí lekci, Aplikace Kalkulačka v tkinter - Tvoříme GUI, jsme vytvořili uživatelské rozhraní pro aplikaci Kalkulačka. Vytvořili jsme hlavní okno aplikace, vstupní pole a tlačítka. Těm jsme dosadili patřičné funkce.
V následujícím tutoriálu GUI aplikací v Pythonu si
vytvoříme soubor main.py, ve kterém
seskládáme jednotlivé třídy aplikace Kalkulačka
dohromady. Také se naučíme, jak spustíme hlavní smyčku
programu pomocí metody mainloop(), která udržuje okno
otevřené a reaguje na uživatelské interakce.
Sestavení aplikace Kalkulačka
Hlavní a největší část práce na naší aplikaci Kalkulačka navržené
pomocí architektury MVC a zpracované v GUI pod knihovnou Pythonu
tkinter máme za sebou. Zbývá nám již pouze pospojovat
jednotlivé komponenty aplikace tak, aby vše fungovalo, jak má.
Rozdělíme si postup do několika kroků. Od vytvoření
souboru, kterým budeme aplikaci spouštět, až po udržení aplikace
otevřené.
Vytvoření souboru
main.py
Ve složce Kalkulacka/ si vytvoříme soubor s názvem
main.py. Následující kód budeme psát právě v tomto souboru.
Jako obvykle nejprve importujeme potřebné moduly a třídy
pomocí příkazu import. Kromě tkinter importujeme
třídy CalculatorModel, CalculatorView a
CalculatorController z odpovídajících souborů aplikace:
import tkinter from calculatormodel import CalculatorModel from calculatorview import CalculatorView from calculatorcontroller import CalculatorController
Ve funkci __main__() si vytvoříme instanci třídy
Tk. Tato instance je přiřazena proměnné root a
představuje hlavní okno aplikace. Pomocí metody
configure() nastavíme vnitřní odsazení okna
(pady a padx). Název okna nastavíme
na Calculator pomocí metody title():
if __name__ == "__main__": root = tk.Tk() root.configure(pady=15, padx=15) root.title("Calculator")
Vytváření instancí modelu, pohledu a kontroleru
V následujícím bodě si vytvoříme instance tříd
CalculatorModel, CalculatorViewa
CalculatorController.
Instance CalculatorModel
Instanci třídy vložíme do proměnné model. Tento objekt se
nám postará o výpočty a uschová výraz. Instance
představuje v rámci MVC model kalkulačky:
model = CalculatorModel()
Instance CalculatorView
Tato instance představuje pohled na kalkulačku. Bude zobrazovat grafické prvky a přijímat uživatelské interakce. Objektu musíme předat dva argumenty:
- rodičovské okno
root(do toho budou prvky umístěny), - hodnota
None. Tu jsme použili dočasně jako odkaz na kontroler, jelikož ten ještě nebyl vytvořen.
view = CalculatorView(root, None)
Instance
CalculatorController
Závěrečné instanci nesmíme zapomenout předat správné argumenty. Těmi budou:
- instance modelu
model, - instance pohledu
view.
Takto sestaveným objektem jsme vytvořili spojení mezi modelem a pohledem prostřednictvím kontroleru:
controller = CalculatorController(model, view)
Pomocí těchto instancí jsme vytvořili komponenty modelu, pohledu a kontroleru a propojili je tak, aby spolu spolupracovaly a vytvořily funkční kalkulačku. Model se stará o výpočty a uchovávání dat, pohled zobrazuje grafické prvky a reaguje na uživatelské interakce a kontroler zajišťuje komunikaci mezi nimi a řídí jejich vzájemné interakce.
Přiřazení reference na kontroler v pohledu
Přiřazení reference na kontroler objektu
view je důležitý krok v procesu vytváření vzájemné
komunikace mezi viewem a kontrolerem. Provedeme to tak, že vytvoříme instanci
CalculatorController a tuto instanci předáme pohledu
CalculatorView. Předání instance kontroleru pohledu je
důležité, protože umožňuje pohledu komunikovat s kontrolerem a
vyvolávat příslušné akce po kliknutí na tlačítka.
Konkrétně jsme přiřadili instanci kontroleru (controller) do
atributu controller instance pohledu. To jsme provedli za
pomoci:
view.controller = controller
Tím jsme vytvořili referenci na kontroler v pohledové třídě. Díky tomuto přiřazení může pohled předat informace o uživatelských interakcích (např. kliknutí na tlačítko) kontroleru. Kontroler následně zpracuje tuto informaci a provede odpovídající akci, například aktualizaci modelu na základě stisknutého tlačítka. Tímto způsobem je zajištěné propojení mezi pohledem a kontrolerem a umožňuje se interakce mezi těmito dvěma komponentami kalkulačky.
Funkce mainloop()
Spuštění hlavní smyčky eventů pro nás nyní představuje klíčový
krok v procesu vytváření a provozování aplikace v tkinter.
V poslední části kódu používáme metodu mainloop() na
objektu hlavního okna root. Tato metoda spouští smyčku, která
je zodpovědná za naslouchání uživatelským interakcím a
udržování otevřeného okna aplikace.
Po spuštění funkce mainloop() se program přesouvá do
aktivního stavu, ve kterém očekává uživatelské vstupy a
události, jako jsou:
- kliknutí myší,
- stisknutí klávesy,
- jiné interakce s GUI.
Metoda mainloop() nám zajišťuje, že okno zůstává aktivní
a reaguje na naše akce. Když například klikneme na tlačítko v kalkulačce,
vyvolá se událost, která je zachycena kontrolerem a provede se
odpovídající akce. Například aktualizace zobrazení na obrazovce.
Tímto způsobem udržujeme aplikaci v interaktivním režimu. Ta tím pádem dokáže reagovat na události, které generujeme. Funkce tedy umožňuje kalkulačce pracovat v reálném čase. Poskytuje plynulou a responzivní interakci s GUI.
Jednou větou řečeno, kalkulačka zůstane otevřená a funkční do té doby, dokud ji sami nezavřeme 😉
Spustitelný soubor
Určitě nechceme ke spuštění naší grafické kalkulačky pokaždé
spouštět terminál. Na samotný závěr si proto vyrobíme soubor spustitelný
ve Windows. Pojmenujeme ho kalkulacka.exe. K vytvoření použijeme
knihovnu PyInstaller. Nemáme-li ji ještě nainstalovanou,
spustíme si terminál a vložíme tento příkaz:
Instalace knihovny PyInstaller:
pip install pyinstaller
V kořenové složce Kalkulacka/, v níž se nachází soubory
aplikace včetně main.py pak v terminálu spustíme následující
příkaz:
Vytvoření souboru kalkulacka.exe:
pyinstaller --onefile --windowed --name kalkulacka main.py
Význam jednotlivých parametrů je následující:
onefileje volba, která říkáPyInstaller, aby všechny naše soubory a závislosti zabalil do jednoho.exesouboru,windowedje volba, která potlačí konzolové okno v GUI aplikacích,namedefinuje název výstupního.exesouboru,main.pyje název vstupního souboru Pythonu, který chceme převést na.exe.
Příkazem dojde k vytvoření tří složek:
__pycache__/obsahuje předkompilované soubory byte kódu Pythonu.build/obsahuje dočasné soubory, kteréPyInstallervytváří při analýze našeho kódu. Obsahuje informace, kteréPyInstallerpoužívá k vytvoření finálního.exesouboru.dist/obsahuje finální spustitelný soubor (v našem případěkalkulacka.exe). S volbouonefileto bude jediný soubor v této složce. Pokud tuto volbu nepoužijeme, složkadist/bude obsahovat.exesoubor a všechny závislé knihovny jako samostatné soubory.
Jedinou složkou, kterou potřebujeme, je složka dist/.
Ostatní jsou pouze pro dočasné účely během procesu sestavení a nejsou
potřebné pro běh naší aplikace.
Kompletní zdrojový kód aplikace je ke stažení na konci lekce.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 187x (3.38 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

