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
, CalculatorView
a
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í:
onefile
je volba, která říkáPyInstaller
, aby všechny naše soubory a závislosti zabalil do jednoho.exe
souboru,windowed
je volba, která potlačí konzolové okno v GUI aplikacích,name
definuje název výstupního.exe
souboru,main.py
je 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éPyInstaller
vytváří při analýze našeho kódu. Obsahuje informace, kteréPyInstaller
používá k vytvoření finálního.exe
souboru.dist/
obsahuje finální spustitelný soubor (v našem případěkalkulacka.exe
). S volbouonefile
to bude jediný soubor v této složce. Pokud tuto volbu nepoužijeme, složkadist/
bude obsahovat.exe
soubor 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 162x (3.38 kB)
Aplikace je včetně zdrojových kódů v jazyce Python