Configurazione con Python
Prerequisiti
Prima di iniziare, dovremo installare Kirigami e PySide sul nostro computer.
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 |
Se utilizzi una distribuzione con vecchi pacchetti PySide6 o PyQt6, questo tutorial funziona con Creazione di software con distrobox.
Struttura del progetto
Per prima cosa creiamo la cartella del nostro progetto (puoi utilizzare i comandi seguenti). Chiameremo il nostro kirigami_python/.
kirigami_python/
├── README.md
├── LICENSE.txt
├── MANIFEST.in # Per aggiungere i nostri file QML
├── pyproject.toml # Il file principale per gestire il progetto
├── org.kde.kirigami_python.desktop
└── src/
├── __init__.py # Per importare la directory src/ come pacchetto
├── __main__.py # Per segnalare l'applicazione come punto di ingresso
├── app.py
└── qml/
└── Main.qmlIl nome del pacchetto sarà "kirigami_python", l'"eseguibile" (script della console) si chiamerà "kirigami_hello" e il punto di ingresso sarà "app".
Suggerimento
Per generare rapidamente questa struttura di cartelle, esegui semplicemente:mkdir -p kirigami_python/src/qml/.Per un progetto più completo che approfondisca ulteriormente questa struttura di file, vedere Progetto completo in Python + Kirigami.
pyproject.toml
Le moderne applicazioni Python necessitano di un solo file TOML per specificare tutti i metadati, le informazioni sui pacchetti e le dipendenze a partire da PEP 621. Quanto segue costituisce un buon punto di partenza per un'applicazione e può essere esteso in seguito.
La maggior parte dei contenuti di questo file sono standard e una versione più completa può essere vista in Python with Kirigami: General Structure.
| |
Nota le linee evidenziate. Come menzionato in Struttura del progetto, il nome del pacchetto è "kirigami_python", il nome dell'eseguibile è "kirigami_hello" e il nome del punto di ingresso è "app". In particolare si segnala quanto segue:
- Lo script del progetto è costituito da uno script entrypoint che verrà generato da setuptools per l'esecuzione dell'applicazione, in questo caso
kirigami_hello. - Lo script del progetto generato
kirigami_helloesegue la funzionemain()nello scriptapp.pynel pacchettokirigami_python. - La "dir-pacchetto" predefinita per i progetti Python è solitamente la directory root. In questo caso, questa viene sostituita dalla sottodirectory
src/quindi funziona come se fosse la directory root del pacchetto. - La
dir-pacchettoè il motivo per cui lo script del progetto generato eseguekirigami_python → appinvece dikirigami_python → src → app. package-dirè anche il motivo per cui la chiamataimportlib.resources.files()in app.py eseguekirigami_python → qml → Main.qmlinvece dikirigami_python → src → qml → Main.qml.
Vedi Esecuzione diretta, come modulo e come script della console per i dettagli.
org.kde.kirigami_python.desktop
Lo scopo principale dei file Desktop Entry è mostrare la tua app nell'avviatore applicazioni su Linux. Un altro motivo per averli è avere le icone delle finestre su Wayland, poiché sono necessarie per dire al compositore "questa finestra va con questa icona".
Deve seguire uno schema di denominazione DNS inverso seguito dall'estensione .desktop come org.kde.kirigami_python.desktop:
| |
Nota
Le icone della finestra e della barra delle applicazioni funzioneranno in una sessione Wayland solo se i file desktop delle applicazioni sono posizionati in "~/.local/share/applications" o "/usr/share/applications". Per far funzionare le icone in questo tutorial, copia lì il file desktop dell'applicazione.MANIFEST.in
Questo file è semplicemente una dichiarazione di file di codice sorgente aggiuntivi che dovrebbero essere presenti nel pacchetto quando viene eseguita l'applicazione. Python per impostazione predefinita non include file QML nei pacchetti e devono essere disponibili affinché l'applicazione possa essere eseguita.
| |
src/app.py
| |
Poiché si tratta di un'applicazione GUI, vogliamo che la funzione main venga eseguita solo quando viene eseguito lo script, non quando viene importato, quindi abbiamo bisogno della condizione if __name__ == "__main__" alla fine del file. Vedi Esecuzione diretta, come modulo e come script della console per i dettagli.
Creiamo una QGuiApplication e inizializziamo il motore QML, e con QGuiApplication.exec() l'applicazione continuerà a funzionare fino alla chiusura. Quindi importlib.resources.files() prende il percorso di un file presente nel pacchetto, vale a dire il nostro Main.qml. Con questo percorso carichiamo il file QML nel motore QML come punto di ingresso principale per l'interfaccia dell'applicazione.
src/__init__.py
Crea un file kirigami_python/src/__init__.py vuoto. Questo file deve solo essere presente per importare una directory come pacchetto.
touch __init__.pysrc/__main__.py
Crea un kirigami_python/src/__main__.py con il seguente contenuto:
| |
Questo aggiunge semplicemente il contenuto della directory corrente (src/) e lo importa come modulo chiamato app, quindi esegue immediatamente la funzione main() dell'applicazione.
src/qml/Main.qml
| |
Ecco dove gestiremo l'interfaccia della nostra applicazione.
Se conosci un po' di Javascript, allora la gran parte di QML ti sembrerà familiare (sebbene abbia delle sue caratteristiche proprie)). Se hai voglia di provare a fare qualcosa da solo la documentazione di Qt ha un'ampia quantità di materiale su questo linguaggio. In queste esercitazioni focalizzeremo la nostra attenzione principalmente sul codice QML, nel quale possiamo utilizzare Kirigami per ottenerne il massimo.
Per ora concentriamoci su Main.qml. Per prima cosa importiamo una serie di moduli importanti:
- QtQuick, la libreria standard utilizzata nelle applicazioni QML.
- QtQuick Controls, che fornisce una serie di controlli standard che possiamo utilizzare per rendere interattive le nostre applicazioni.
- QtQuick Layouts, che fornisce strumenti per posizionare i componenti all'interno della finestra dell'applicazione.
- Kirigami, che fornisce una serie di componenti adatti per creare applicazioni che funzionano su dispositivi di diverse forme e dimensioni.
Nota
Mettere i controlli QtQuick e le importazioni Kirigami in spazi dei nomi separati utilizzando la parola chiave "as" è una best practice che garantisce che nessun componente con lo stesso nome possa entrare in conflitto. Potresti vedere nomi diversi per i controlli QtQuick in natura, come "QQC" o "QQC2". Utilizzeremo i "Controlli" in questo tutorial per chiarezza.Arriviamo quindi al nostro elemento di base, Kirigami.ApplicationWindow, che fornisce alcune funzionalità di base necessarie per tutte le applicazioni Kirigami. Questa è la finestra che conterrà ciascuna delle nostre pagine, le sezioni principali della nostra UI.
Successivamente impostiamo la proprietà id della finestra su "root". Gli ID sono utili perché ci consentono di fare riferimento in modo univoco a un componente, anche se ne abbiamo diversi dello stesso tipo.
Impostiamo anche la proprietà title della finestra su "Hello World".
Impostiamo quindi la prima pagina del nostro stack di pagine. La maggior parte delle applicazioni Kirigami sono organizzate come una pila di pagine, ciascuna pagina contenente componenti correlati adatti a un'attività specifica. Per ora, manteniamo le cose semplici e ci atteniamo a una singola pagina. pageStack è una pila di pagine inizialmente vuota fornita da Kirigami.ApplicationWindow, e con pageStack.initialPage: Kirigami.Page {...} impostiamo la prima pagina presentata dopo aver caricato l'applicazione su una Kirigami.Page. Questa pagina conterrà tutti i nostri contenuti.
Infine, includiamo nella nostra pagina un Controls.Label che ci consente di inserire del testo nella nostra pagina. Usiamo anchors.centerIn: parent per centrare la nostra etichetta orizzontalmente e verticalmente all'interno del nostro elemento genitore. In questo caso, il componente principale della nostra etichetta è Kirigami.Page. L'ultima cosa che dobbiamo fare è impostarne il testo: text: "Hello World!".
Esecuzione dell'applicazione
Puoi eseguire lo script della console kirigami_hello senza doverlo prima installare:
pipx run --system-site-packages --spec . kirigami_helloIl flag --system-site-packages è necessario per consentire a Python di accedere ai pacchetti Python dalla tua distribuzione. Ciò è necessario perché Kirigami e PySide devono essere costruiti sulla stessa versione Qt per funzionare, come nel caso in cui entrambi provengono dalla distribuzione.
Il flag "--spec" determina il percorso del codice sorgente o del pacchetto wheel che contiene il programma e "kirigami_hello" è lo script eseguibile da eseguire.
Per creare e installare il pacchetto Python, esegui:
pipx install --force --system-site-packages .Il pacchetto verrà installato in "/.local/share/pipx/venvs/kirigami-python" e uno script eseguibile verrà installato in "/.local/bin/kirigami_hello".
Uso di pipx rispetto a pip
A differenza di Python con Kirigami: creazione di un pacchetto Python, questo tutorial utilizza pipx per rendere il progetto più semplice da eseguire e installare. Gli stessi passaggi possono essere eseguiti manualmente con venv, build e pip come nel tutorial più completo.
pipx è utile e consigliato secondo PEP 668 per l'esecuzione di applicazioni Python, mentre pip è multiuso e può essere utilizzato anche per moduli Python importabili.
Successivamente, l'applicazione può essere avviata eseguendo:
kirigami_helloPer eseguire la nuova applicazione QML in modalità mobile, puoi utilizzare QT_QUICK_CONTROLS_MOBILE=1:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_helloVoilà! Ora vedrai la tua primissima app Kirigami apparire davanti ai tuoi occhi.
