Jednotka Kirigami
Predpoklady
Pred začiatkom budeme musieť nainštalovať Kirigami a PySide na náš počítač.
sudo pacman -S python-pipx python-pyqt6 pyside6 kirigami flatpak-builder qqc2-desktop-style appstream | |
sudo zypper install python3-pipx python3-qt6 python3-pyside6 kf6-kirigami-devel flatpak-builder kf6-qqc2-desktop-style AppStream-compose | |
sudo dnf install pipx python3-pyqt6 python3-pyside6 kf6-kirigami-devel flatpak-builder kf6-qqc2-desktop-style appstream-compose |
Ak ste na distribúcii so starými balíkmi PySide6 alebo PyQt6, tento tutoriál funguje s Zostavenie softvéru s distrobox.
Štruktúra projektu
Najprv vytvoríme priečinok nášho projektu (môžete použiť nižšie uvedené príkazy). Náš budeme volať kirigami_python/.
kirigami_python/
├── README.md
├── LICENSE.txt
├── MANIFEST.in # Na pridanie našich súborov QML
├── pyproject.toml # Hlavný súbor na správu projektu
├── org.kde.kirigami_python.desktop
└── src/
├── __init__.py # Na import adresára src/ ako balíčka
├── __main__.py # Na označenie app ako vstupného bodu
├── app.py
└── qml/
└── Main.qmlNázov balíka bude kirigami_python, "spustiteľný súbor" (konzolový skript) sa bude volať kirigami_hello a vstupný bod bude app.
Hore
Na rýchle vygenerovanie tejto štruktúry priečinkov jednoducho spustite:mkdir -p kirigami_python/src/qml/.Pre komplexnejší projekt, ktorý ide do väčších detailov o tejto štruktúre súborov, pozrite Kompletný projekt v Pythone + Kirigami.
pyproject.toml
Moderné aplikácie Python potrebujú iba jeden TOML súbor na špecifikáciu všetkých metadát, informácií o balíku a závislostí od PEP 621. Nasledujúci slúži ako dobrý štartér pre aplikáciu a dá sa neskôr rozšíriť.
Väčšina obsahu v tomto súbore je šablónový a jeho kompletnejšiu verziu nájdete v časti Python s Kirigami: Všeobecná štruktúra.
| |
Všimnite si zvýraznené riadky. Ako je uvedené v časti Štruktúra projektu, názov balíka je kirigami_python, názov spustiteľného súboru je kirigami_hello a názov vstupného bodu je app. Konkrétne je potrebné poznamenať nasledovné:
- Skript projektu pozostáva zo vstupného skriptu, ktorý bude vygenerovaný nástrojom setuptools na spustenie aplikácie, v tomto prípade
kirigami_hello. - Vygenerovaný skript projektu
kirigami_hellospúšťa funkciumain()v skripteapp.pyv balíkukirigami_python. - Predvolený
package-dirpre projekty Python je zvyčajne koreňový adresár. V tomto prípade je prepísaný podadresáromsrc/, takže funguje, akoby bol koreňovým adresárom balíka. package-dirje dôvod, prečo vygenerovaný skript projektu robíkirigami_python → appnamiestokirigami_python → src → app.package-dirje tiež dôvod, prečo volanieimportlib.resources.files()v app.py robíkirigami_python → qml → Main.qmlnamiestokirigami_python → src → qml → Main.qml.
Podrobnosti nájdete v časti Spúšťanie priamo, ako modul a ako konzolový skript.
org.kde.kirigami_python.desktop
Primárnym účelom súborov Desktop Entry je zobraziť vašu aplikáciu v spúšťači aplikácií v Linuxe. Ďalším dôvodom mať ich je mať ikony okien na Waylande, pretože sú potrebné na to, aby povedali kompozitoru "toto okno patrí k tejto ikone".
Musí nasledovať schému pomenovania s obráteným DNS s príponou .desktop, ako napríklad org.kde.kirigami_python.desktop:
| |
Poznámka
Ikony okien a panela úloh budú fungovať v relácii Wayland iba ak sú súbory desktop aplikácií umiestnené v~/.local/share/applications alebo /usr/share/applications. Aby ikony v tomto tutoriáli fungovali, skopírujte súbor desktop aplikácie tam.MANIFEST.in
Tento súbor je jednoducho deklaráciou dodatočných súborov zdrojového kódu, ktoré by mali byť prítomné v balíku pri spustení aplikácie. Python predvolene nezahŕňa QML súbory do balíkov a musia byť dostupné, aby aplikácia fungovala.
| |
src/app.py
| |
Keďže toto je GUI aplikácia, chceme, aby hlavná funkcia bežala iba keď sa skript spúšťa, nie keď sa importuje, takže potrebujeme podmienku if __name__ == "__main__" na konci súboru. Podrobnosti nájdete v časti Spúšťanie priamo, ako modul a ako konzolový skript.
Vytvoríme QGuiApplication a inicializujeme QML engine a pomocou QGuiApplication.exec() bude aplikácia bežať, kým sa nezatvorí. Potom importlib.resources.files() získa cestu k súboru, ktorý je prítomný v balíku, konkrétne náš Main.qml. S touto cestou načítame QML súbor do QML engine ako hlavný vstupný bod pre rozhranie aplikácie.
src/__init__.py
Vytvorte prázdny súbor kirigami_python/src/__init__.py. Tento súbor jednoducho musí byť prítomný, aby bolo možné importovať adresár ako balík.
touch __init__.pysrc/__main__.py
Vytvorte kirigami_python/src/__main__.py s nasledujúcim obsahom:
| |
Toto jednoducho pridá obsah aktuálneho adresára (src/) a importuje ho ako modul s názvom app, potom okamžite spustí funkciu main() aplikácie.
src/qml/Main.qml
| |
Tu budeme spracovávať frontend našej aplikácie.
Ak poznáte trochu Javascript, potom sa vám veľa z QML bude zdať povedomé (aj keď má svoje zvláštnosti). Dokumentácia Qt má rozsiahle množstvo materiálu o tomto jazyku, ak chcete skúsiť niečo na vlastnú päsť. V priebehu týchto tutoriálov sa zameriame veľkú časť pozornosti na náš QML kód, kde môžeme využiť Kirigami na maximum.
Zatiaľ sa zameriame na Main.qml. Najprv importujeme niekoľko dôležitých modulov:
- QtQuick, štandardná knižnica používaná v aplikáciách QML.
- QtQuick Controls, ktorá poskytuje množstvo štandardných ovládacích prvkov, ktoré môžeme použiť na interaktívnosť našich aplikácií.
- QtQuick Layouts, ktorá poskytuje nástroje na umiestňovanie komponentov v rámci okna aplikácie.
- Kirigami, ktorá poskytuje množstvo komponentov vhodných na vytváranie aplikácií fungujúcich na zariadeniach rôznych tvarov a veľkostí.
Poznámka
Umiestnenie importov QtQuick Controls a Kirigami do samostatných menných priestorov pomocou kľúčového slovaas je osvedčený postup, ktorý zabezpečuje, že žiadne komponenty s rovnakým názvom nemôžu kolidovať. V praxi môžete vidieť rôzne názvy pre QtQuick Controls, ako napríklad "QQC" alebo "QQC2". V tomto tutoriáli budeme pre prehľadnosť používať "Controls".Potom sa dostávame k nášmu základnému prvku, Kirigami.ApplicationWindow, ktorý poskytuje niektoré základné funkcie potrebné pre všetky aplikácie Kirigami. Toto je okno, ktoré bude obsahovať každú z našich stránok, hlavné sekcie nášho UI.
Potom nastavíme vlastnosť id okna na "root". ID sú užitočné, pretože nám umožňujú jednoznačne odkazovať na komponent, aj keď máme niekoľko rovnakého typu.
Tiež nastavíme vlastnosť title okna na "Hello World".
Potom nastavíme prvú stránku nášho zásobníka stránok. Väčšina aplikácií Kirigami je organizovaná ako zásobník stránok, pričom každá stránka obsahuje súvisiace komponenty vhodné pre konkrétnu úlohu. Zatiaľ to udržujeme jednoduché a zostávame pri jednej stránke. pageStack je pôvodne prázdny zásobník stránok poskytovaný Kirigami.ApplicationWindow a pomocou pageStack.initialPage: Kirigami.Page {...} nastavíme prvú stránku prezentovanú pri načítaní aplikácie na Kirigami.Page. Táto stránka bude obsahovať všetok náš obsah.
Nakoniec zahrnieme na našu stránku Controls.Label, ktorý nám umožní umiestniť text na stránku. Používame anchors.centerIn: parent na vycentrovanie nášho popisku horizontálne a vertikálne v rámci rodičovského prvku. V tomto prípade je rodičovským komponentom nášho popisku Kirigami.Page. Posledná vec, ktorú musíme urobiť, je nastaviť jeho text: text: "Hello World!".
Spustenie aplikácie
Konzolový skript kirigami_hello môžete spustiť bez potreby ho najprv inštalovať:
pipx run --system-site-packages --spec . kirigami_helloPríznak --system-site-packages je potrebný na to, aby mal Python prístup k balíkom Python z vašej distribúcie. Toto je vyžadované, pretože Kirigami a PySide musia byť zostavené proti rovnakej verzii Qt, aby fungovali, čo je prípad, keď oba pochádzajú z distribúcie.
Príznak --spec určuje cestu k zdrojovému kódu alebo balíku wheel, ktorý obsahuje program, a kirigami_hello je spustiteľný skript, ktorý sa má spustiť.
Na zostavenie a inštaláciu balíčka Python spustite:
pipx install --force --system-site-packages .Balík bude nainštalovaný do ~/.local/share/pipx/venvs/kirigami-python a spustiteľný skript bude nainštalovaný do ~/.local/bin/kirigami_hello.
Použitie pipx verzus pip
Na rozdiel od Python s Kirigami: Vytvorenie balíka Python, tento tutoriál použil pipx na uľahčenie spúšťania a inštalácie projektu. Rovnaké kroky sa dajú urobiť manuálne pomocou venv, build a pip ako v kompletnejšom tutoriáli.
pipx je užitočný a odporúčaný podľa PEP 668 na spúšťanie aplikácií Python, zatiaľ čo pip je viacúčelový a dá sa použiť aj pre importovateľné moduly Python.
Potom je možné aplikáciu spustiť spustením:
kirigami_helloNa spustenie novej QML aplikácie v mobilnom režime môžete použiť QT_QUICK_CONTROLS_MOBILE=1:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_helloVoilà! Teraz uvidíte vašu úplne prvú aplikáciu Kirigami priamo pred vašimi očami.
