Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

4. diel - Aplikácia Kalkulačka v tkinter - Dokončenie

V predchádzajúcej lekcii, Aplikácia Kalkulačka v tkinter - Tvoríme GUI , sme vytvorili používateľské rozhranie pre aplikáciu Kalkulačka. Vytvorili sme hlavné okno aplikácie, vstupné polia a tlačidlá. Tým sme dosadili patričné funkcie.

V nasledujúcom tutoriále GUI aplikácií v Pythone si vytvoríme súbor main.py, v ktorom skladáme jednotlivé triedy aplikácie Kalkulačka dohromady. Tiež sa naučíme, ako spustíme hlavnú slučku programu pomocou metódy mainloop(), ktorá udržuje okno otvorené a reaguje na užívateľské interakcie.

Dokončujeme aplikáciu Kalkulačka

Hlavnú a najväčšiu časť práce na našej aplikácii Kalkulačka navrhnutej pomocou architektúry MVC a spracovanej v GUI pod knižnicou Pythonu tkinter máme za sebou. Zostáva nám už iba pospájať jednotlivé komponenty aplikácie tak, aby všetko fungovalo ako má. Rozdelíme si postup do niekoľkých krokov. Od vytvorenia súboru, ktorým budeme aplikáciu spúšťať, až po udržanie aplikácie otvorené.

Vytvorenie súboru main.py

V priečinku Kalkulacka/ si vytvoríme súbor s názvom main.py. Nasledujúci kód budeme písať práve v tomto súbore. Ako obvykle najprv importujeme potrebné moduly a triedy pomocou príkazu import. Okrem tkinter importujeme triedy CalculatorModel, CalculatorView a CalculatorController zo zodpovedajúcich súborov aplikácie:

import tkinter
from calculatormodel import CalculatorModel
from calculatorview import CalculatorView
from calculatorcontroller import CalculatorController

Vo funkcii __main__() si vytvoríme inštanciu triedy Tk. Táto inštancia je priradená premennej root a predstavuje hlavné okno aplikácie. Pomocou metódy configure() nastavíme vnútorné odsadenie okna (pady a padx). Názov okna nastavíme na Calculator pomocou metódy title():

if __name__ == "__main__":
    root = tk.Tk()
    root.configure(pady=15, padx=15)
    root.title("Calculator")

Vytváranie inštancií modelu, pohľadu a kontroléra

V nasledujúcom bode si vytvoríme inštancie tried CalculatorModel, CalculatorView a CalculatorController.

Inštancia CalculatorModel

Inštanciu triedy vložíme do premennej model. Tento objekt sa nám postará o výpočty a uschová výraz. Inštancia predstavuje v rámci MVC model kalkulačky:

model = CalculatorModel()

Inštancia CalculatorView

Táto inštancia predstavuje pohľad na kalkulačku. Bude zobrazovať grafické prvky a prijímať užívateľské interakcie. Objektu musíme odovzdať dva argumenty:

  • rodičovské okno root (do toho budú prvky umiestnené),
  • hodnota None. Tú sme použili dočasne ako odkaz na kontrolér, pretože ten ešte nebol vytvorený.
view = CalculatorView(root, None)

Inštancia CalculatorController

Záverečné inštanciu nesmieme zabudnúť odovzdať správne argumenty. Tými budú:

  • inštancia modelu model,
  • inštancie pohľadu view.
Takto zostaveným objektom sme vytvorili spojenie medzi modelom a pohľadom prostredníctvom kontroléra:
controller = CalculatorController(model, view)

Pomocou týchto inštancií sme vytvorili komponenty modelu, pohľadu a kontroléra a prepojili ich tak, aby spolu spolupracovali a vytvorili funkčnú kalkulačku. Model sa stará o výpočty a uchovávanie dát, pohľad zobrazuje grafické prvky a reaguje na užívateľské interakcie a kontrolér zaisťuje komunikáciu medzi nimi a riadi ich vzájomné interakcie.

Priradenie referencie na kontrolér v pohľade

Priradenie referencie na kontrolér objektu view je dôležitý krok v procese vytvárania vzájomnej komunikácie medzi viewom a kontrolerom. Vykonáme to tak, že vytvoríme inštanciu CalculatorController a túto inštanciu odovzdáme pohľadu CalculatorView. Odovzdanie inštancie kontroléra pohľadu je dôležité, pretože umožňuje pohľadu komunikovať s kontrolérom a vyvolávať príslušné akcie po kliknutí na tlačidlá.

Konkrétne sme priradili inštanciu kontroléra (controller) do atribútu controller inštancie pohľadu. To sme urobili pomocou:

view.controller = controller

Tým sme vytvorili referenciu na kontrolér v pohľadovej triede.

Vďaka tomuto priradeniu môže pohľad odovzdať informácie o užívateľských interakciách (napr. kliknutie na tlačidlo) kontroléra. Kontrolér následne spracuje túto informáciu a vykoná zodpovedajúcu akciu, napríklad aktualizáciu modelu na základe stlačeného tlačidla. Týmto spôsobom je zaistené prepojenie medzi pohľadom a kontrolérom a umožňuje sa interakcia medzi týmito dvoma komponentmi kalkulačky.

Funkcia mainloop()

Spustenie hlavnej slučky eventov pre nás teraz predstavuje kľúčový krok v procese vytvárania a prevádzkovania aplikácie v tkinter.

V poslednej časti kódu používame metódu mainloop() na objekte hlavného okna root. Táto metóda spúšťa slučku, ktorá je zodpovedná za počúvanie užívateľských interakcií a udržiavanie otvoreného okna aplikácie.

Po spustení funkcie mainloop() sa program presúva do aktívneho stavu, v ktorom očakáva užívateľské vstupy a udalosti, ako sú:

  • kliknutie myšou,
  • stlačenie klávesy,
  • iné interakcie s GUI.
Metóda mainloop() nám zaisťuje, že okno zostáva aktívne a reaguje na naše akcie. Keď napríklad klikneme na tlačidlo v kalkulačke, vyvolá sa udalosť, ktorá je zachytená kontrolérom a vykoná sa zodpovedajúca akcia. Napríklad aktualizácia zobrazenia na obrazovke.

Týmto spôsobom udržujeme aplikáciu v interaktívnom režime. Tá tým pádom dokáže reagovať na udalosti, ktoré generujeme. Funkcia teda umožňuje kalkulačke pracovať v reálnom čase. Poskytuje plynulú a responzívnu interakciu s GUI.

Raz vetou povedané, kalkulačka zostane otvorená a funkčná dovtedy, kým ju sami nezavrieme 😉

Spustiteľný súbor

Určite nechceme na spustenie našej grafickej kalkulačky zakaždým spúšťať terminál. Na samotný záver si preto vyrobíme súbor spustiteľný vo Windows. Pomenujeme ho kalkulacka.exe. Na vytvorenie použijeme knižnicu PyInstaller. Ak ju nemáme ešte nainštalovanú, spustíme si terminál a vložíme tento príkaz:

Instalace knihovny PyInstaller:
pip install pyinstaller

V koreňovom priečinku Kalkulacka/, v ktorom sa nachádzajú súbory aplikácie vrátane main.py potom v termináli spustíme nasledujúci príkaz:

Vytvoření souboru kalkulacka.exe:
pyinstaller --onefile --windowed --name kalkulacka main.py

Význam jednotlivých parametrov je nasledujúci:

  • onefile je voľba, ktorá hovorí PyInstaller, aby všetky naše súbory a závislosti zabalil do jedného .exe súboru,
  • windowed je voľba, ktorá potlačí konzolové okno v GUI aplikáciách,
  • name definuje názov výstupného .exe súboru,
  • main.py je názov vstupného súboru Pythona, ktorý chceme previesť na .exe.
Príkazom dôjde k vytvoreniu troch zložiek:
  1. __pycache__/ obsahuje predkompilované súbory byte kódu Pythona.
  2. build/ obsahuje dočasné súbory, ktoré PyInstaller vytvára pri analýze nášho kódu. Obsahuje informácie, ktoré PyInstaller používa na vytvorenie finálneho .exe súboru.
  3. dist/ obsahuje finálny spustiteľný súbor (v našom prípade kalkulacka.exe). S voľbou onefile to bude jediný súbor v tomto priečinku. Pokiaľ túto voľbu nepoužijeme, zložka dist/ bude obsahovať .exe súbor a všetky závislé knižnice ako samostatné súbory.
Jedinou zložkou, ktorú potrebujeme, je zložka dist/. Ostatné sú iba na dočasné účely počas procesu zostavenia a nie sú potrebné pre beh našej aplikácie.

Kompletný zdrojový kód aplikácie je na stiahnutie na konci lekcie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 93x (3.38 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Aplikácia Kalkulačka v tkinter - Tvoríme GUI
Všetky články v sekcii
Tkinter - Okenné aplikácie v Pythone
Článok pre vás napísal Jan Kumpf
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity