IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

1. diel - Zoznámenie s PyQt, Inštalácia a prvé okenné aplikácie v Python

Vitajte v kurze o tvorbe okenných / formulárových aplikácií v Pythone. Postupne si spolu vytvoríme niekoľko projektov, od tých úplne jednoduchých až po užitočné a reálne použiteľné desktopové aplikácie. Väčšina kurzu je venovaná najpopulárnejšia multiplatformový formulárové knižnici Qt. V druhej časti kurzu je potom ukázaná aj práca s knižnicou Tkinter, rovnako veľmi populárne, avšak minimalistickejší a obmedzenú iba pre Python.

PyQt

V dnešnom tutoriále si teda vytvoríme svoju prvú okenné aplikáciu v Pythone za pomoci Qt frameworku. Ten sa hojne využíva k tvorbe GUI aplikácií v rôznych programovacích jazykoch, je teda multiplatformový a vyzerá natívne. Qt je napísané v C ++ a je v ňom možné písať aplikácie aj na mobilné zariadenia. My budeme používať PyQt, čo je port Qt pre Python.

Inštalácia PyQt

Počítam s tým, že Python máte nainštalovaný. Osobne odporúčam Python 3.6, ideálne distribúciu Anaconda alebo odľahčená verzia Miniconda (Miniconda nainštaluje iba Conde a python, Anaconda nainštaluje aj ďalších 150 knihovať pre dáta science, matematiku a vizualizáciu). Klasická distribúcie samozrejme tiež bohato postačuje.

Keď už máte Python nainštalovaný, teda ak ste ho doteraz nemali, tak sa vrhneme na inštaláciu PyQt5. Spustíme príkazový riadok (Kláves Win, napíšeme "cmd", klikneme na nájdený program "Príkazový riadok") a vložíme do neho príkaz:

py -m pip install pyqt5

Inštalácia môže chvíľu trvať. Nainštalovali sa nám Qt Widgety a samotnej PyQt5. Teraz si overíme, či inštalácia prebehla naozaj úspešne. Pre kontrolu spustíme python shell príkazom:

py

v príkazovom riadku / terminálu a potom knižnicu skúsime naimportovať:

import PyQt5

Ak vám shell nevypísala žiadnu chybu, ste pripravení si vytvoriť svoju prvú aplikáciu v PyQt.

Hello world

Ani v úvodnej formulárové lekcii nezačneme ničím iným, než Hello World. To je populárny aplikácia, Vyhlasujúca hlášku "Ahoj Svete!", V našom prípade už nie do konzoly, ale do formulára.

Vytvorme si teda nový Python projekt, môžete použiť štandardný editor IDLE, a uložte ho napr. Ako main.py. Kód našej prvej aplikácie bude nasledujúci, vzápätí si ho vysvetlíme:

from PyQt5 import QtWidgets
import sys

aplikace = QtWidgets.QApplication(sys.argv)
formular = QtWidgets.QWidget()
popisek = QtWidgets.QLabel("Ahoj Světe!", parent=formular)

formular.show()
sys.exit(aplikace.exec_())

Ako prvý musíme importovať widgety z PyQt5, ako sa ovládacím prvkom formulárov v tomto frameworku prezýva. Ďalej importujete modul sys, keďže QApplication sa odovzdávajú vstupné argumenty z príkazového riadku, na ktoré aplikácie potom môže nejako reagovať. Tvrdenia získame práve z modulu sys. Namiesto argumentov by síce išlo vložiť len prázdny list ([]), ale predsa chceme robiť veci od začiatku správne :)

Po importoch nasleduje vytvorení QApplication, ktorá reprezentuje celú našej formulárovom aplikáciu. Ďalej tvoríme formulár ako QWidget a vložíme do neho textový popis QLabel s hláškou "Ahoj Svete!", Ktorú odovzdáme ako parameter widgetu. Všetky inštancie tvoríme pomocou triedy QtWidgets. Pre vloženie widgetov do formulára je nutné uviesť do akého formulára sa majú vložiť pomocou parametra parent.

Formulári môžeme ďalej nastavovať layouty (môj obľúbený je BoxLayout), veľkosť, pozíciu a mnoho ďalších, čo si ukážeme za chvíľu.

Nakoniec je formulár nutné zobraziť a aplikáciu spustiť (sys.exit() vráti operačnému systému výstupný kód programu). Keď náš projekt teraz spustíme, budeme odmenení nasledujúce formulárovom aplikácií:

Hello world formulárové aplikácie v Pythone pomocou PyQt - Okenné aplikácie v Pythone

Veľkosť okna

Naša aplikácia plní účel, ale moc dobre nevyzerá. Bolo by pekné, keby okno bolo väčšie a zobrazovalo sa na inej pozícii. Pred zobrazenie formulára pridáme riadok:

formular.setGeometry(300, 200, 250, 300)

Funkcia setGeometry() prijíma postupne pozíciu na obrazovke zľava, pozíciu na obrazovke zhora, šírku okna a jeho výšku). Čo je to ale za okno bez titulku?

Titulok

Titulok oknu nastavíme funkcií setWindowTitle(), prijímajúci samozrejme titulok ako text.

formular.setWindowTitle("Moje první aplikace v PyQt")

Po spustení aplikácie nám vznikne nasledujúce dielo:

Programovanie formuláre pomocou PyQt v Pythone - Okenné aplikácie v Pythone

K dokonalosti chýba už len, že QLabel nie je uprostred. Preto využijeme tzv. Layout. Layouty sú komponenty, ktoré umožňujú widgety vo formulári nejakým spôsobom poskladať a zarovnať. Napr. QHBoxLayout. Ten widgety vo formulári radí vedľa seba a zvisle sú vycentrované. Aby sme QLabel vycentroval aj vodorovne, vložíme pred neho a za neho rozťahujúce-sa prázdne miesto pomocou funkcie addStretch().

Finálny kód našej Hellow World aplikácie vyzerá nasledovne, formulár som ešte trochu zväčšil, aby sa zobrazil celý titulok okna:

from PyQt5 import QtWidgets
import sys

aplikace = QtWidgets.QApplication(sys.argv)
formular = QtWidgets.QWidget()
boxlayout = QtWidgets.QHBoxLayout()

popisek = QtWidgets.QLabel("Ahoj Světe!", parent=formular)
formular.setGeometry(300, 200, 250, 300)

boxlayout.addStretch()
boxlayout.addWidget(popisek)
boxlayout.addStretch()

formular.setLayout(boxlayout)
formular.show()
sys.exit(aplikace.exec_())

A obrázok samotnej aplikácie:

Výsledná formulárové aplikácie v Pythone a PyQt - Okenné aplikácie v Pythone

V budúcej lekcii, Aplikácie Kalkulačka v PyQt , si ukážeme tvorbu jednoduché okenné kalkulačky. Vyskúšame callback funkcie pri stlačení tlačidla a zmenu hodnoty / textu u labelu.


 

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é 185x (1.17 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Všetky články v sekcii
Okenné aplikácie v Pythone
Preskočiť článok
(neodporúčame)
Aplikácie Kalkulačka v PyQt
Článok pre vás napísal MQ .
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity