Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 50% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se Javy

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

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 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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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.


 

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 104x (1.17 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Všechny články v sekci
PyQt - Okenní aplikace v Pythonu
Článek pro vás napsal MQ .
Avatar
Jak se ti líbí článek?
4 hlasů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity (4)

 

 

Komentáře

Avatar
cinkim
Člen
Avatar
cinkim:13.3.2019 15:05

Zdravím, jdou takto vytvořené okenní aplikace spustit v jiném PC který nemá na sobě žádnou instalaci Pythonu?

 
Odpovědět
13.3.2019 15:05
Avatar
MQ .
Redaktor
Avatar
Odpovídá na cinkim
MQ .:13.3.2019 16:21

Ahoj, abys mohl spustit okenní aplikaci napsanou v Pythonu na PC, které nemá Python musíš z .py vytvořit .exe. Na to existuje pár nástrojů a jeden s kterým mám menší zkušenost je http://www.pyinstaller.org/. Ten ti vytvoří .exe, kde jsou "zabalené" knihovny a samotný Python, soubor je celkem velký a proto je někdy lepší prostě s programem instalovat i Python :)

 
Odpovědět
13.3.2019 16:21
Avatar
Jan Halouzka
Člen
Avatar
Jan Halouzka:16.3.2019 16:12

Ahoj, používám PyCharm a na něm mi to nejde spustit.

Traceback (most recent call last):
File "C:/Users/hon­za/Desktop/pyt­.py", line 1, in <module>
from PyQt5 import QtWidgets
ModuleNotFoundE­rror: No module named 'PyQt5'

Tohle to hlásí. Nějaké rady na vyřešení?

 
Odpovědět
16.3.2019 16:12
Avatar
MQ .
Redaktor
Avatar
Odpovídá na Jan Halouzka
MQ .:16.3.2019 16:29

Ahoj, máš nainstalované PyQt5?

 
Odpovědět
16.3.2019 16:29
Avatar
Jan Halouzka
Člen
Avatar
Odpovídá na MQ .
Jan Halouzka:16.3.2019 16:45

Udělal jsem přesně to, co je zde napsaná v příkazové řádce, takže asi ano.

 
Odpovědět
16.3.2019 16:45
Avatar
MQ .
Redaktor
Avatar
Odpovídá na Jan Halouzka
MQ .:16.3.2019 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
16.3.2019 16:57
Avatar
Jan Halouzka
Člen
Avatar
Odpovídá na MQ .
Jan Halouzka:17.3.2019 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.3.2019 9:58
Avatar
opiceg
Člen
Avatar
opiceg:23.4.2019 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.4.2019 12:46
Avatar
MQ .
Redaktor
Avatar
Odpovídá na opiceg
MQ .:23.4.2019 12:55

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

 
Odpovědět
23.4.2019 12:55
Avatar
opiceg
Člen
Avatar
opiceg:23.4.2019 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.4.2019 20:11
Avatar
Filip Němeček
Překladatel
Avatar
Odpovídá na opiceg
Filip Němeček:24.4.2019 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.4.2019 11:52
Avatar
MQ .
Redaktor
Avatar
Odpovídá na opiceg
MQ .:24.4.2019 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.4.2019 19:14
Avatar
opiceg
Člen
Avatar
opiceg:27.4.2019 11:26

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

 
Odpovědět
27.4.2019 11:26
Avatar
MQ .
Redaktor
Avatar
Odpovídá na opiceg
MQ .:27.4.2019 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.4.2019 11:50
Avatar
Petr Jeřábek
Redaktor
Avatar
Odpovídá na opiceg
Petr Jeřábek:8.6.2019 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.6.2019 15:32
Declare variables, not war
Avatar
Jiří Špulka:14.10.2019 9:33

Prosím o radu:

import PyQt5
from PyQt5 import QtWidgets
import sys

aplikace = QtWidgets.QAp­plication(sys­.argv)
formular = QtWidgets.QWidget()
popisek = QtWidgets.QLa­bel("Ahoj Světe!", parent=formular)

formular.show()
sys.exit(apli­kace.exec_())

PS C:\Users\Jiří\Do­cuments\Python> & C:/Users/Jiří/Ap­pData/Local/Pro­grams/Python/Pyt­hon37/python.e­xe c:/Users/Jiří/Do­cuments/Python/Ok­no1.py
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

PS C:\Users\Jiří\Do­cuments\Python>

Kde dělám chybu???

 
Odpovědět
14.10.2019 9:33
Avatar
flotoo
Člen
Avatar
Odpovídá na Jiří Špulka
flotoo:14.10.2019 21:27

Instalace PyQt5 dopadla úspěšně?

Editováno 14.10.2019 21:29
 
Odpovědět
14.10.2019 21:27
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
 
Odpovědět
14.10.2019 21:41
Avatar
Josef Rajmon
Člen
Avatar
Josef Rajmon:25.10.2019 5:07

Dobry den
Chtel bych se zeptat jak to je u programatora... je lepsi kdyz pouzivam k dizainu programovani nebo muzu pouzit nejaky disigner?

 
Odpovědět
25.10.2019 5:07
Avatar
MQ .
Redaktor
Avatar
Odpovídá na Josef Rajmon
MQ .:25.10.2019 6:54

Ahoj, to opravdu záleží na tom, čeho chceš dosáhnout. Pokud chceš spíše statický design tak bych to naklikal v designérů a pokud něco dynamického a nekonvenčního tak bych radši psal kód.

 
Odpovědět
25.10.2019 6:54
Avatar
Josef Rajmon
Člen
Avatar
Odpovídá na MQ .
Josef Rajmon:25.10.2019 11:01

Aha... a hry jsou tedy co? Lepsi programem?

 
Odpovědět
25.10.2019 11:01
Avatar

Člen
Avatar
:27.10.2019 16:32

Ahoj,mám problém nainstaloval jsem si PyQt5,ale pokaždé co chci spustit nějaký soubor napíše se chyba:
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Bohužel jsem začátečník a nevím co stím. Moc děkuju za případnou pomoc.

 
Odpovědět
27.10.2019 16:32
Avatar
Jiří Špulka:6.11.2019 21:37

Vážení kolegové p"h"ytonisti. Mám malý/velký problém. Spustil jsem Client/Server aplikaci v nejméně třech variantách kódu staženého od renomovaných programátorů na netu. Bohužel Client mi ve všech případech vrací hlášku: ConnectionRefu­sedError: [WinError 10061] Nemohlo být vytvořeno žádné připojení, protože cílový počítač je aktivně odmítl. Máte někdo podobné zkušenosti, popř. radu, kde dělám chybu. Díky jš

 
Odpovědět
6.11.2019 21:37
Avatar
Marián Mídelka:8.1.2020 11:55

Môžete mi niekto poradiť ako nainštalovať knižnicu PyQt5, skúšal som horeuvedené postupy aj cez upgrade ale po spustení py a zadaní import PyQt5 mi vyhadzuje: ModuleNotFoundE­rror:
No module named 'PyQt5'. Skúste mi poradiť.

Odpovědět
8.1.2020 11:55
Keď niečo nejde, skús niečo iné. Možno to tiež nepôjde!
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 17:03

Můžeš zkusit v terminálu:
python3 -m pip install --upgrade pip
python3 -m pip install PyQt5

 
Odpovědět
8.1.2020 17:03
Avatar
Marián Mídelka:8.1.2020 20:16

Ďakujem ale vypisuje mi to : 'python3' is not recognizet as an internal or external command,
operable program or batch file. Asi sa ďalej nepohnem.

Odpovědět
8.1.2020 20:16
Keď niečo nejde, skús niečo iné. Možno to tiež nepôjde!
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 21:32

Tedy pravděpodobně používáš Python 2.xxx, postup by měl být stejný jen vynechat tu trojku. Přesto bych doporučil používat trojkové verze, je tam sice několik změn, ale tak nějak jsou příjemnější.
python -m pip install --upgrade pip
python -m pip install PyQt5 možná to bude chtít malá písmena (třeba Linux to rozlišuje dost důsledně, Windows to má na háku) :-D

 
Odpovědět
8.1.2020 21:32
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 21:37

Zkoušel jsem to teď na Linuxu a hlásí mi to, že python 2.7 je DEPRICATED od 1. ledna 2020
'DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.'

 
Odpovědět
8.1.2020 21:37
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 21:45

Hm, na 2.7 se mi to taky nepovedlo, a na 3.6.9 je již instalace provedena, ale podle hlášení by asi prošla.

Pokud používáš PyCharm IDE (Komunitní verzi nebo ostrou, je to jedno) Tam je přímo update balíčků. Ovšem stejně doporučuji Python3 -- aktuální verze je 3.8.1

Editováno 8.1.2020 21:46
 
Odpovědět
8.1.2020 21:45
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 22:02

Potom by byla ještě jedna možnost. Poohlédnout se přímo na stránce tvůrce

 
Odpovědět
8.1.2020 22:02
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 22:42

Přepnul jsem se do Windows, předpokládám, že tento OS používáš.

Nemám zde Python vůbec, tak to zkusím krok za krokem. (Možná bude problém, že mám všechny knihovny Qt5 pro C++, protože v tom dělám jak na Woknech tak Linuxu)

Stáhnu si Python 3.8.1 spouštím, volím uživatelskou instalaci a raději si označím vše... celkem mne zaráží, že je to 32-bitové. Musím povolit změny na disku. Celé to trvá, asi 7 nebo 10 minut, protože jsem si zvolil i předkompilaci knihoven.

Příkazový řádek: klávesa WIN a psát cmd: tam příkaz `python'

`Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>` Tedy zatím je to OK.

CMD zavírám a hledám v menu start System Windows - Příkazový řádek - pravá myš a spustit jako správce. To je důležité!!!!

Zadám tam : python -m pip install --upgrade pip

a jedu dále

zadám python -m pip install PyQt5 bude to stahovat asi 45MB

`C:\WINDOWS\sys­tem32>python -m pip install PyQt5
Collecting PyQt5
Downloading https://files.pythonhosted.org/…ne-win32.whl (44.9MB)
|████████████­████████████████████| 44.9MB 78kB/s
Collecting PyQt5-sip<13,>=12.7
Downloading https://files.pythonhosted.org/…38-win32.whl (49kB)
|████████████­████████████████████| 51kB 233kB/s
Installing collected packages: PyQt5-sip, PyQt5
Successfully installed PyQt5-5.14.1 PyQt5-sip-12.7.0`

tedy asi hotovo a jdeme na test s importerm, ale nyní už na jako správce:

`>>> import PyQt5
>>>`

Tedy se zdá, že ok je vše. Víc už fakt poradit nemohu.

Editováno 8.1.2020 22:43
 
Odpovědět
8.1.2020 22:42
Avatar
Virlupus
Redaktor
Avatar
Odpovídá na Marián Mídelka
Virlupus:8.1.2020 22:58

Pokud to s Qt myslíš vážně, doporučuji stáhnout si QtDesigner, který funguje i pro Python, dost ulehčí tvorbu GUI. Snad se autor kurzu o tom zmíní. Držím palce a přeji hodně úspěchů v programátorském světě :-)

 
Odpovědět
8.1.2020 22:58
Avatar
Jan Sebastián Kostlán :27.10.2020 13:09

Zdravím, nefunguje mi PyQt5 a pořád mi píše toto:
Nevíte, co s tím?

Odpovědět
27.10.2020 13:09
Logika a kreativita je nejlepší
Avatar
Petr Los
Člen
Avatar
Petr Los:1.11.2020 11:54

tak jsem na MacOS provedl instalaci PyQt5 pres HomeBrew (ktera podle vypisu z terminalu probehla v poradku), ale pise to stale chybu:

"/Users/petrlos/Do­cuments/Python Projects/play­ground/venv/bin/pyt­hon" "/Users/petrlos/Do­cuments/Python Projects/play­ground/main.py"
Traceback (most recent call last):
File "/Users/petrlos/Do­cuments/Python Projects/play­ground/main.py", line 2, in <module>
from PyQt5 import QtWidgets
ModuleNotFoundE­rror: No module named 'PyQt5'

tusi nekdo jak to opravit? :)

 
Odpovědět
1.11.2020 11:54
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 34 zpráv z 34.