IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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í:

  • 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:

  1. __pycache__/ obsahuje předkompilované soubory byte kódu Pythonu.
  2. 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.
  3. dist/ obsahuje finální spustitelný soubor (v našem případě kalkulacka.exe). S volbou onefile to bude jediný soubor v této složce. Pokud tuto volbu nepoužijeme, složka dist/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 98x (3.38 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Aplikace Kalkulačka v tkinter - Tvoříme GUI
Všechny články v sekci
Tkinter - Okenní aplikace v Pythonu
Článek pro vás napsal Jan Kumpf
Avatar
Uživatelské hodnocení:
11 hlasů
Aktivity