Lekce 1 - Seznámení s PyQt, Instalace a první okenní aplikace v Python

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte v kurzu o tvorbě okenních/formu­lář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 knihovem 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/termíná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í:

Hello world formulářová aplikace v Pythonu pomocí PyQt

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:

Programování formuláře pomocí PyQt v Pythonu

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ýsledná formulářová aplikace v Pythonu a PyQt

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.


 

Stáhnout

Staženo 36x (1.17 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

 

Článek pro vás napsal MQ .
Avatar
Jak se ti líbí článek?
3 hlasů
Autor je srdcem Pythonista.
Všechny články v sekci
Okenní aplikace v Pythonu
Miniatura
Následující článek
Aplikace Kalkulačka v PyQt
Aktivity (3)

 

 

Komentáře
Zobrazit starší komentáře (5)

Avatar
MQ .
Překladatel
Avatar
MQ .:16. března 16:57

Otevři si CMD a spusť python příkazem python, poté zkus import PyQt5, pokud nastane problém tak PyQt5 není nainstalované, pokud problém nenastane zkus spustit script přes CMD příkazem python tvuj_soubor.py. PyCharm jsem nikdy nepužíval, ale mám pocit, že se ty knihovny instalují přímo v tom prostředí.

Odpovědět  +1 16. března 16:57
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Avatar
Jan Halouzka
Člen
Avatar
Odpovídá na MQ .
Jan Halouzka:17. března 9:58

Díky moc. Já jsem idiot. Mi mohlo dojít, že to mám udělat v terminálu v PyCharmu a ne ve Win. :DD

 
Odpovědět 17. března 9:58
Avatar
opiceg
Člen
Avatar
opiceg:23. dubna 12:46

Když zkusím import pyqt5 vypíše to chybu, ale když zkusím pyqt5 znova nainstalovat vypíše to že je už nainstalováno. Nevím co mam dělat. Prosím pomoc.

 
Odpovědět 23. dubna 12:46
Avatar
MQ .
Překladatel
Avatar
Odpovídá na opiceg
MQ .:23. dubna 12:55

Ahoj, nahraj sem prosím screenshot hlášky :)

Odpovědět 23. dubna 12:55
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Avatar
opiceg
Člen
Avatar
opiceg:23. dubna 20:11

Jsem si vědom že by mohl být rozdíl mezi windows a mac, ale ten samý problém mám i s windows.

 
Odpovědět 23. dubna 20:11
Avatar
Filip Němeček
Redaktor
Avatar
Odpovídá na opiceg
Filip Němeček:24. dubna 11:52

Co rovnou začít používat virtual environment (venv) pro Python projekty? Budeš mít balíčky oddělené a nebude docházet ke kolizím, když jiný projekt potřebuje jinou verzi. Před použitím stačí venv aktivovat a pracuješ s pip úplně stejně jako bez ně, ale balíčky máš hezky oddělné a lépe se řeší podobné problémy :-)

 
Odpovědět 24. dubna 11:52
Avatar
MQ .
Překladatel
Avatar
Odpovídá na opiceg
MQ .:24. dubna 19:14

V tomto screenshotu není chyba můžeš prosím příkaz "import pyqt5" spustit a nahrát screenshot chybové hlášky, kterou to vyhazuje.

Odpovědět 24. dubna 19:14
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Avatar
opiceg
Člen
Avatar
opiceg:27. dubna 11:26

Pardon vystřihl jsem předtim jen malou část

 
Odpovědět 27. dubna 11:26
Avatar
MQ .
Překladatel
Avatar
Odpovídá na opiceg
MQ .:27. dubna 11:50

Ahoj, na Macu mi PyQt5 normálně fungovalo. Mám 4 možné řešení:

  • Zkus pip3 install pyqt5, jelikož na Mac OS máš více python verzí
  • Nainstaluj PyQt5 přes MiniConda/Anaconda distribuci příkazem conda install -c anaconda pyqt, pokud nepomůže zkus conda install -c dsdale24 pyqt5
  • Nainstaluj to přes HomeBrew brew install pyqt (nebo poté zkus pyqt5) a poté spusť příkaz LDFLAGS=-L/usr/local/opt/qt/lib CPPFLAGS=-I/usr/local/opt/qt/include pip3 install PyQt5 -- zdroj
  • Přidat si knihovny do PYTHONPATH odkaz
Odpovědět 27. dubna 11:50
Programovácí jazyk zítřka bude vysokoúrovňový, bez ";", prostý a v neposlední řadě čitelný.
Avatar
Petr Jeřábek
Redaktor
Avatar
Odpovídá na opiceg
Petr Jeřábek:8. června 15:32

Ahoj, chyba bude podle mě v tom, že importuješ pyqt5. Zkus napsat import PyQt5 (velké P a Q, takový byl problém u mě)

Odpovědět 8. června 15:32
Declare variables, not war
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 15. Zobrazit vše