Lekce 1 - Seznámení s PyQt, Instalace a první okenní aplikace v Python
Vítejte v kurzu o tvorbě okenních/formulářových aplikací v Pythonu. Postupně si spolu vytvoříme několik projektů, od těch úplně jednoduchých až po užitečné a reálně použitelné desktopové aplikace. Většina kurzu je věnována nejpopulárnější multiplatformní formulářové knihovně Qt. V druhé části kurzu je poté ukázána i práce s knihovnou Tkinter, rovněž velmi populární, ovšem minimalističtější a omezenou pouze pro Python.
PyQt
V dnešním tutoriálu si tedy vytvoříme svou první okenní aplikaci v Pythonu za pomoci Qt frameworku. Ten se hojně využívá k tvorbě GUI aplikací v různých programovacích jazycích, je tedy multiplatformní a vypadá nativně. Qt je napsané v C++ a je v něm možné psát aplikace i na mobilní zařízení. My budeme používat PyQt, což je port Qt pro Python.
Instalace PyQt
Počítám s tím, že Python máte nainstalovaný. Osobně doporučuji Python 3.6, ideálně distribuci Anaconda nebo odlehčená verze Miniconda (Miniconda nainstaluje pouze condu a python, Anaconda nainstaluje i dalších 150 knihoven pro data science, matematiku a vizualizaci). Klasická distribuce samozřejmě také bohatě postačuje.
Když již máte Python nainstalovaný, tedy pokud jste ho doteď neměli, tak se vrhneme na instalaci PyQt5. Spustíme příkazový řádek (Klávesa Win, napíšeme "cmd", klikneme na nalezený program "Příkazový řádek") a vložíme do něj příkaz:
py -m pip install pyqt5
Instalace může chvíli trvat. Nainstalovaly se nám Qt Widgety a samotné PyQt5. Nyní si ověříme, zda instalace proběhla opravdu úspěšně. Pro kontrolu spustíme python shell příkazem:
py
v příkazovém řádku/terminálu a poté knihovnu zkusíme naimportovat:
import PyQt5
Pokud vám shell nevypsal žádnou chybu, jste připraveni si vytvořit svou první aplikaci v PyQt.
Hello world
Ani v úvodní formulářové lekci nezačneme ničím jiným, než Hello World. To je populární aplikace, vypisující hlášku "Ahoj Světe!", v našem případě již ne do konzole, ale do formuláře.
Vytvořme si tedy nový Python projekt, můžete použít standardní editor
IDLE, a uložme jej např. jako main.py
. Kód naší první
aplikace bude následující, záhy si jej vysvětlí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_())
Jako první musíme importovat widgety z PyQt5, jak se ovládacím prvkům
formulářů v tomto frameworku přezdívá. Dále naimportujeme modul
sys
, jelikož QApplication
se předávají vstupní
argumenty z příkazové řádky, na které aplikace poté může nějak
reagovat. Argumenty získáme právě z modulu sys
. Místo
argumentů by sice šlo vložit jen prázdný list ([]
), ale přeci
chceme dělat věci od začátku správně
Po importech následuje vytvoření QApplication
, která
reprezentuje celou naší formulářovou aplikaci. Dále tvoříme formulář
jako QWidget
a vložíme do něj textový popisek
QLabel
s hláškou "Ahoj Světe!", kterou předáme jako parametr
widgetu. Všechny instance tvoříme pomocí třídy QtWidgets
. Pro
vložení widgetů do formuláře je nutné uvést do jakého formuláře se
mají vložit pomocí parametru parent
.
Formuláři můžeme dále nastavovat layouty (můj oblíbený je BoxLayout), velikost, pozici a mnoho dalších, což si ukážeme za chvíli.
Nakonec je formulář nutné zobrazit a aplikaci spustit
(sys.exit()
vrátí operačnímu systému výstupní kód
programu). Když náš projekt nyní spustíme, budeme odměněni následující
formulářovou aplikací:
Velikost okna
Naše aplikace plní účel, ale moc dobře nevypadá. Bylo by hezké, kdyby okno bylo větší a zobrazovalo se na jiné pozici. Před zobrazení formuláře přidáme řádek:
formular.setGeometry(300, 200, 250, 300)
Funkce setGeometry()
přijímá postupně pozici na obrazovce
zleva, pozici na obrazovce shora, šířku okna a jeho výšku). Co je to ale za
okno bez titulku?
Titulek
Titulek oknu nastavíme funkcí setWindowTitle()
,
přijímající samozřejmě titulek jako text.
formular.setWindowTitle("Moje první aplikace v PyQt")
Po spuštění aplikace nám vznikne následující dílo:
K dokonalosti chybí již jen, že QLabel
není uprostřed.
Proto využijeme tzv. Layout. Layouty jsou komponenty, které umožňují
widgety ve formuláři nějakým způsobem poskládat a zarovnat. Např.
QHBoxLayout
. Ten widgety ve formuláři řadí vedle sebe a svisle
jsou vycentrované. Abychom QLabel
vycentrovali i vodorovně,
vložíme před něj a za něj roztahující-se prázdné místo pomocí funkce
addStretch()
.
Finální kód naší Hellow World aplikace vypadá následovně, formulář jsem ještě trochu zvětšil, aby se zobrazil celý titulek 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ázek samotné aplikace:
V příští lekci, Aplikace Kalkulačka v PyQt, si ukážeme tvorbu jednoduché okenní kalkulačky. Vyzkoušíme callback funkce při stisknutí tlačítka a změnu hodnoty/textu u labelu.
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 176x (1.17 kB)
Aplikace je včetně zdrojových kódů v jazyce Python