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
.
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.
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
.
__pycache__/
obsahuje predkompilované súbory byte kódu Pythona.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.dist/
obsahuje finálny spustiteľný súbor (v našom prípadekalkulacka.exe
). S voľbouonefile
to bude jediný súbor v tomto priečinku. Pokiaľ túto voľbu nepoužijeme, zložkadist/
bude obsahovať.exe
súbor a všetky závislé knižnice ako samostatné súbory.
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é 137x (3.38 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python