C/C++ week Anniversary - BF
80 % bodů zdarma na online výuku díky naší Narozeninové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C/C++

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 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

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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 69x (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ů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
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 (22)

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. ledna 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. ledna 11:55
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 17:03

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

 
Odpovědět
8. ledna 17:03
Avatar
Marián Mídelka:8. ledna 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. ledna 20:16
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 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. ledna 21:32
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 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. ledna 21:37
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 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. ledna 21:46
 
Odpovědět
8. ledna 21:45
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 22:02

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

 
Odpovědět
8. ledna 22:02
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 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. ledna 22:43
 
Odpovědět
8. ledna 22:42
Avatar
Virlupus
Překladatel
Avatar
Odpovídá na Marián Mídelka
Virlupus:8. ledna 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. ledna 22:58
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 32. Zobrazit vše