El Kirigami amb Python
Prerequisits
Abans de començar, haurem d'instal·lar el Kirigami i el PySide a la nostra màquina.
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 qqc2-desktop-style AppStream-compose | |
sudo dnf install pipx python3-pyqt6 python3-pyside6 kf6-kirigami-devel flatpak-builder qqc2-desktop-style appstream-compose |
Si teniu en una distribució amb paquets antics de PySide6 o PyQt6, aquesta guia d'aprenentatge funciona amb Construir programari amb distrobox.
Estructura del projecte
Primer crearem la nostra carpeta de projecte (podeu utilitzar les ordres de sota). L'anomenarem kirigami_python/
.
kirigami_python/
├── README.md
├── LICENSE.txt
├── MANIFEST.in # Per a afegir els nostres fitxers QML
├── pyproject.toml # El fitxer principal per a gestionar el projecte
├── org.kde.kirigami_python.desktop
└── src/
├── __init__.py # Per a importar el directori src/ com a paquet
├── __main__.py # Per a assenyalar l'aplicació com a punt d'entrada
├── app.py
└── qml/
└── Main.qml
El nom del paquet serà kirigami_python
, l'«executable» (script de consola) s'anomenarà kirigami_hello
i el punt d'entrada serà app
.
Consell
Per a generar ràpidament aquesta estructura de carpetes, simplement executeu:mkdir -p kirigami_python/src/qml/
.Per a un projecte més complet que entri en més detalls sobre aquesta estructura de fitxers, vegeu Projecte complet en Python + Kirigami.
pyproject.toml
Les aplicacions Python modernes només necessiten un sol fitxer TOML per a especificar totes les metadades, la informació del paquet i les dependències a partir del PEP 621. El següent serveix com un bon iniciador per a una aplicació i es pot ampliar més tard.
La major part del contingut d'aquest fitxer és estàndard, i es pot veure una versió més completa d'ell a Python amb el Kirigami: Estructura general.
|
|
Tingueu en compte les línies ressaltades. Com s'esmenta a estructura del projecte, el nom del paquet és kirigami_python
, el nom de l'executable és kirigami_hello
, i el nom del punt d'entrada és app
. En particular, cal destacar el següent:
- L'script del projecte consisteix en un script de punt d'entrada que serà generat per «setuptools» de l'aplicació a executar, en aquest cas
kirigami_hello
. - L'script de projecte generat
kirigami_hello
executa la funciómain()
a l'scriptapp.py
al paquetkirigami_python
. - El
package-dir
predeterminat dels projectes Python és normalment el directori arrel. En aquest cas, això se substitueix pel subdirectorisrc/
, de manera que actua com si fos el directori arrel del paquet. - El
package-dir
és per què l'script generat del projecte fakirigami_python → app
en lloc dekirigami_python → src → app
. - El
package-dir
també és per què la cridaimportlib.resources.files()
a app.py fakirigami_python → qml → Main.qml
en lloc dekirigami_python → src → qml → Main.qml
.
Vegeu els detalls a Executar directament, com a mòdul i com a script de consola.
org.kde.kirigami_python.desktop
El propòsit principal dels fitxers Desktop Entry és mostrar la vostra aplicació al llançador d'aplicacions en el Linux. Una altra raó per a tenir-los és tenir icones de finestra al Wayland, ja que es requereixen per a dir al compositor «aquesta finestra va amb aquesta icona».
Ha de seguir un esquema de noms DNS invers seguit de l'extensió .desktop
com ara org.kde.kirigami_python.desktop
:
|
|
Nota
Les icones de les finestres i de la barra de tasques només funcionaran en una sessió del Wayland si els fitxers «desktop» de les aplicacions es col·loquen a~/.local/share/applications
o /usr/share/applications
. Per a aconseguir icones que funcionin en aquesta guia d'aprenentatge, copieu aquí el fitxer «desktop» de l'aplicació.MANIFEST.in
Aquest fitxer és senzillament una declaració de fitxers de codi font addicionals que haurien d'estar presents en el paquet quan s'executi l'aplicació. El Python no inclou fitxers QML als paquets de manera predeterminada, i han d'estar disponibles perquè l'aplicació s'executi.
|
|
src/app.py
|
|
Com que aquesta és una aplicació IGU, volem que la funció principal només s'executi quan s'executa l'script, no quan s'importa, de manera que necessitem la condició if __name__ == "__main__"
al final del fitxer. Vegeu els detalls a Executar directament, com a mòdul i com a script de consola.
Creem una QGuiApplication i iniciem el motor QML, i amb QGuiApplication.exec()
l'aplicació seguirà funcionant fins que es tanqui. Llavors importlib.resources.files()
agafa el camí cap a un fitxer que està present en el paquet, és a dir, al nostre Main.qml
. Amb aquest camí, carreguem el fitxer QML al motor QML com a punt d'entrada principal per a la interfície de l'aplicació.
src/__init__.py
Creeu un fitxer kirigami_python/src/__init__.py
buit. Aquest fitxer només ha d'estar present per importar un directori com a paquet.
touch __init__.py
src/__main__.py
Creeu un kirigami_python/src/__main__.py
amb el contingut següent:
|
|
Això simplement afegeix el contingut del directori actual (src/
) i l'importa com un mòdul anomenat app
, després immediatament executa la funció main()
de l'aplicació.
src/qml/Main.qml
|
|
Aquí és on manejarem el frontal de la nostra aplicació.
Si coneixeu alguna cosa de JavaScript, gran part de QML us resultarà familiar (encara que té les seves pròpies peculiaritats). Si teniu ganes de provar alguna cosa pel vostre compte, la documentació de les Qt té una gran quantitat de material sobre aquest llenguatge. Al llarg d'aquestes guies d'aprenentatge, centrarem gran part de la nostra atenció en el codi en QML, on podrem emprar el Kirigami per a aprofitar-lo al màxim.
Per ara, centrem-nos en Main.qml
. Primer importarem diversos mòduls importants:
- QtQuick, la biblioteca estàndard utilitzada en les aplicacions QML.
- QtQuick Controls, que proporciona una sèrie de controls estàndard que podem utilitzar perquè les nostres aplicacions siguin interactives.
- QtQuick Layouts, que proporciona eines per a col·locar els components dins de la finestra de l'aplicació.
- El Kirigami, que proporciona una sèrie de components adequats per a crear aplicacions que funcionen en dispositius de formes i mides diferents.
Nota
Posar els QtQuick Controls i les importacions del Kirigami en espais de noms separats utilitzant la paraula clauas
és una millor pràctica que assegura que cap component amb el mateix nom pugui entrar en conflicte. Podreu trobar diferents noms per als controls QtQuick en els textos, com ara «QQC» o «QQC2». Utilitzarem "Controls" en aquesta guia d'aprenentatge per a més claredat.Després arribem al nostre element base, la Kirigami.ApplicationWindow, que proporciona algunes característiques bàsiques necessàries per a totes les aplicacions escrites amb el Kirigami. Aquesta és la finestra que contindrà cadascuna de les nostres pàgines, les seccions principals de la nostra interfície d'usuari.
Després, establim la propietat id
de la finestra a "root". Els ID són útils perquè ens permeten fer referència de forma única a un component, fins i tot si en tenim diversos del mateix tipus.
També establim la propietat title
de la finestra a "Hola món".
Després establirem la primera pàgina de la nostra pila de pàgines. La majoria de les aplicacions escrites amb el Kirigami estan organitzades com una pila de pàgines, cada pàgina conté els components relacionats adequats per a una tasca específica. Per ara, el mantenim senzill i ens cenyim a una sola pàgina. pageStack és una pila inicialment buida de pàgines proporcionades per Kirigami.ApplicationWindow, i amb pageStack.initialPage: Kirigami.Page{...}
establim la primera pàgina presentada en carregar l'aplicació a una Kirigami.Page. Aquesta pàgina contindrà tot el nostre contingut.
Finalment, incloem en la nostra pàgina un Controls.Label que ens permetrà inserir text a la nostra pàgina. Utilitzarem anchors.centerIn: parent
per a centrar la nostra etiqueta horitzontalment i verticalment dins de l'element pare. En aquest cas, el component principal de la nostra etiqueta és Kirigami.Page. L'últim que hem de fer és configurar el text: text: "Hello World!"
.
Executar l'aplicació
Podeu executar l'script de consola kirigami_hello
sense necessitat d'instal·lar-lo abans:
pipx run --system-site-packages --spec . kirigami_hello
Es necessita l'indicador --system-site-packages
per a fer que el Python tingui accés als paquets Python de la vostra distribució. Això és necessari perquè el Kirigami i el PySide han d'haver estat construïts amb la mateixa versió de les Qt per a funcionar, que és el cas quan tots dos provenen de la distribució.
L'indicador --spec
determina el camí al codi font o paquet «wheel» que té el programa, i kirigami_hello
és l'script executable que s'ha d'executar.
Per a construir i instal·lar el paquet Python, executeu:
pipx install --force --system-site-packages .
El paquet s'instal·larà a ~/.local/share/pipx/venvs/kirigami-python
, i s'instal·larà un script executable a ~/.local/bin/kirigami_hello
.
Ús de «pipx» versus «pip»
A diferència del Python amb el Kirigami: creació d'un paquet Python, aquesta guia d'aprenentatge ha utilitzat pipx
per a fer el projecte més fàcil d'executar i instal·lar. Els mateixos passos es poden fer manualment amb venv
, build
i pip
com en el tutorial més complet.
El pipx
és útil i recomanat segons el PEP 668 per a executar aplicacions Python, mentre que el pip
és multiús i també es pot utilitzar per a mòduls Python importables.
Després d'això, l'aplicació es pot llançar executant:
kirigami_hello
Per a executar la nova aplicació QML en mode de mòbil, podeu utilitzar QT_QUICK_CONTROLS_MOBILE=1
:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_hello
Heus aquí! Ara veureu aparèixer la vostra primera aplicació escrita amb el Kirigami.