1  Úvod

V této knize se zaměříme na základy tvorby aplikací s uživatelským rozhraním v programovacím jazyku Python s využitím knihovny PyQt. Hlavním důvod pro tuto kombinaci je fakt, že Python se řadí mezi nejrozšířenější a nejsnaději použitelné jazyky s širokým spektrem knihoven a frameworků, které usnadňují práci. Z hlediska geoinformatiky je Python zajímavý proto, že většina knihoven a softwarů pro zpracování prostorových dat poskytuje pro tento jazyk API (např. GDAL, PROJ, GEOS a další), většina GIS softwarů pak umožňuje pomocí Pythonu vytvářet extenze či skripty (např. GRASS, QGIS a další). PyQt je jedna z knihoven, skrze kterou lze v Pythonu tvořit aplikace s uživatelským rozhraním. Alternativami jsou např. Tkinter, Kivy, wxPython a další (Costa 2020). Důvodem pro volbu PyQt jsou jednak široké možnosti, které knihovna poskytuje (přes 440 tříd a cca 6000 funkcí), a také fakt, že kromě API (Application Programming Interface) pro samotné GUI (Graphical User Interface) poskytuje i doplňkovou funkcinalitu pro management běhu a funkčnosti aplikace. Tato knihovna je pro geoinformatiky zajímavá, protože QGIS je vytvořen s použitím knihovny Qt, a v případě tvorby pluginů programátor pracuje právě s PyQT.

Kombinace Pythonu, PyQt a geoinformatických knihoven tak poskytuje pro geoinformatiky ideální sadu nástrojů pro tvorbu jak jednoduchých, tak i komplexnějších desktopových aplikací s uživatelským rozhraním.

1.1 Předpoklady

Text předpokládá, že čtenář je obeznámen s principy programování (zejména objektově orientovaného programování), programovacím jazykem Python, základní znalostí typů prvků uživatelského rozhraní a alespoň základní znalostí knihovny GDAL (GDAL/OGR contributors 2022) a jejího Pythonového API. S ohledem na zaměření na geoinformatiku, se také předpokládá že čtenář je obeznámen se softwarem QGIS, který bude používán jako příklad pro vysvětlení některých principů. Tyto poznámky odkazující na QGIS vypadají následně.

QGIS

Poznámky odkazující k QGISu.

Pro seznámení s Python API GDAL lze doporučit publikaci Python GDAL/OGR Cookbok (Erickson et al. 2013), která na praktických případech demonstruje základní principy použití této knihovny. Podobné příklady lze pak najít i v knize Geoprocessing With Python (Garrard 2016).

Při práci s PyQt je mnoho situací, kdy lze volit mezi použitím funkcí z PyQt a pythonových knihoven. Volba mezi nimi je v takovém případě spíše osobní volbou programátora, jeho obeznámenosti s danou technologií, či propojením na další použité nástroje a knihovny. V mnoha situacích nelze specificky určit, že by jeden z přístupů byl lepší či vhodnější. Autor se ve většině případů kloní spíše k použití pythonových knihoven, a tento přístup se bude promítat do ukázkových kódů v publikaci.

QT Třídy vs. Python třídy nebo moduly

Příkladem zaměnitelné funkcionality může být např. třída QDir() (z modulu PyQt5.QtCore) a třída Path() (z modulu pathlib ). Obě položky poskytují v principu velice podobné funkce a možnosti.

Při psaní kódu v Pythonu budeme používat modul typing (Python Software Foundation 2022), a typovat proměnné, jednak z důvodu zlepšení čitelnosti kódu a jednak proto, že většina IDE v takovém případě bude lépe napovídat funkce, argumenty atd. Ukázka pythonového kódu s typováním parametrů, návratového typu a proměnných:

def layer_count(filename: str) -> int:
    ds: ogr.Datasource = ogr.Open(filename)
    return ds.GetLayerCount()