Kirigami med Python
Förutsättningar
Innan vi börjar måste vi installera Kirigami och PySide på datorn.
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 |
Om du använder en distribution med gamla PySide6- eller PyQt6-paket, fungerar den här handledningen med Bygga programvara med distrobox.
Projektstruktur
Först skapar vi vår projektkatalog (du kan använda kommandona nedan). Vi kallar vår kirigami_python/
.
kirigami_python/
├── README.md
├── LICENSE.txt
├── MANIFEST.in # För att lägga till våra QML-filer
├── pyproject.toml # Huvudfilen för att hantera projektet
├── org.kde.kirigami_python.desktop
└── src/
├── __init__.py # För att importera katalogen src/ som ett paket
├── __main__.py # För att signalera app som startpunkten
├── app.py
└── qml/
└── Main.qml
Paketnamnet blir kirigami_python
, det "körbara" (terminalskriptet) kallas kirigami_hello
, och startpunkten blir app
.
Tips
För att snabbt skapa katalogstrukturen, kör bara:mkdir -p kirigami_python/src/qml/
.För ett mer omfattande projekt som går in mer i detalj på filstrukturen, se Fullständigt projekt i Python + Kirigami.
pyproject.toml
Moderna Python-program behöver bara en enda TOML-fil för att specificera all metadata, paketinformation och beroenden från och med PEP 621. Följande fungerar som en bra start för ett program och kan utökas senare.
Det mesta av innehållet i filen är fördefinierade, och en mer komplett version av den kan ses i Python med Kirigami: Allmän struktur.
|
|
Observera de markerade linjerna. Som nämnts under Projektstruktur, är namnet på paketet kirigami_python
, namnet på den körbara filen kirigami_hello
, och namnet på startpunkten är app
. I synnerhet bör följande observeras:
- Projektskriptet består av ett startpunktsskript som genereras av setuptools för programmet att köra, i det här fallet
kirigami_hello
. - Det genererade projektskriptet
kirigami_hello
kör funktionenmain()
i skriptetapp.py
i paketetkirigami_python
. - Standardvärdet på
package-dir
för Python-projekt är vanligtvis rotkatalogen. I det här fallet överskrids det av underkatalogensrc/
så det fungerar som om den är paketets rotkatalog. package-dir
är anledningen till att det genererade projektskriptet använderkirigami_python → app
istället förkirigami_python → src → app
.package-dir
är också anledningen till att anropetimportlib.resources.files()
i app.py använderkirigami_python → qml → Main.qml
istället förkirigami_python → src → qml → Main.qml
.
Se Köra direkt, som en modul och som ett terminalskript för detaljerad information.
org.kde.kirigami_python.desktop
Det primära syftet med Desktop Entry-filer är att visa programmet i programstart på Linux. En annan anledning att ha dem är att ha fönsterikoner på Wayland, eftersom de måste tala om för sammansättningen att "det här fönstret hör ihop med den här ikonen".
Det måste följa ett omvänt domännamnsschema följt av tillägget .desktop
såsom org.kde.kirigami_python.desktop
:
|
|
Anmärkning
Fönster- och aktivitetsradsikoner fungerar bara i en Wayland-session om programmens skrivbordsfiler placeras i~/.local/share/applications
eller /usr/share/applications
. För att få ikoner att fungera i den här handledningen kopiera programmets skrivbordsfiler dit.MANIFEST.in
Filen är helt enkelt en deklaration av ytterligare källkodsfiler som ska finnas i paketet när programmet körs. Python inkluderar normalt inte QML-filer i paket, och de måste vara tillgängliga för att programmet ska kunna köras.
|
|
src/app.py
|
|
Eftersom det är ett grafiskt användargränssnittsprogram vill vi att huvudfunktionen endast ska köras när skriptet körs, inte när det importeras, så vi behöver villkoret if __name__ == "__main__"
i slutet av filen. Se Köra direkt, som en modul och som ett terminalskript för detaljerad information.
Vi skapar en QGuiApplication och initierar QML-gränssnittet, och programmet fortsätter köra till det stängs med QGuiApplication.exec()
. Sedan tar importlib.resources.files()
sökvägen till en fil som finns i paketet, nämligen vår Main.qml
. Med den sökvägen läser vi in QML-filen i QML-gränssnittet som den huvudsakliga startpunkten för programgränssnittet.
src/__init__.py
Skapa en tom fil, kirigami_python/src/__init__.py
. Filen behöver bara finnas för att importera en katalog som ett paket.
touch __init__.py
src/__main__.py
Skapa kirigami_python/src/__main__.py
med följande innehåll:
|
|
Det lägger helt enkelt till innehållet i den aktuella katalogen (src/
) och importerar den som en modul med namnet app
och kör sedan omedelbart programmets funktion main()
.
src/qml/Main.qml
|
|
Här är stället där vi hanterar vårt förgrundsprogram.
Om du kan lite Javascript ser mycket av QML bekant ut (även om det har sina egenheter). Qt:s dokumentation har en omfattande mängd material om språket om du känner för att prova något på egen hand. Genom alla de här handledningarna kommer vi att fokusera mycket av vår uppmärksamhet på vår QML-kod, där vi kan använda Kirigami för att få ut så mycket som möjligt av den.
Låt oss för tillfället fokusera på Main.qml
. Först importerar vi ett antal viktiga moduler:
- QtQuick, standardbiblioteket som används i QML-program.
- QtQuick Controls, som tillhandahåller ett antal standardkontroller som vi kan använda för att göra vårt program interaktivt.
- QtQuick Layouts, som tillhandahåller verktyg för att placera komponenter inom programmets fönster.
- Kirigami, som tillhandahåller ett antal komponenter lämpade för att skapa program som fungerar över apparater av olika form och storlek.
Anmärkning
Att placera QtQuick-kontroller och Kirigami-import i separata namnrymder med nyckelordetas
är bästa praxis för att säkerställa att inga komponenter med samma namn kan orsaka konflikt. Du kan se olika namn för QtQuick Controls i verkligheten, såsom "QQC" eller "QQC2". Vi använder "Controls" i handledningen för tydlighetens skull.Sedan kommer vi till vårt baselement, Kirigami.ApplicationWindow som tillhandahåller några grundfunktioner nödvändiga för alla Kirigami-program. Det är fönstret som kommer att innehålla alla våra sidor, huvuddelen av vårt användargränssnitt.
Vi ställer sedan in fönstrets egenskap id
till 'root'. Identifierare är användbara eftersom de låter oss referera till en komponent unikt, även om vi har flera av samma typ.
Vi ställer också in fönstrets egenskap title
till "Hello World".
Därefter anger vi första sidan i vår sidstapel. Del flesta Kirigami-program är organiserade som en stapel av sidor, där varje sida innehåller relaterade komponenter anpassade för en viss uppgift. För närvarande låter vi det vara enkelt, och håller oss till en enda sida. pageStack är en sidstapel som initialt är tom som Kirigami.ApplicationWindow tillhandahåller, och med pageStack.initialPage: Kirigami.Page {...}
ställer vi in den första sidan som presenteras när programmet laddas i en Kirigami.Page. Sidan står för allt vårt innehåll.
Slutligen inkluderar vi en Controls.Label på vår sida, som låter oss placera text på den. Vi använder anchors.centerIn: parent
för att centrera vår beteckning horisontellt och vertikalt inom vårt överliggande element. I det här fallet är det överliggande elementet för Controls.Label
vår Kirigami.Page. Det sista vi behöver göra är att ange texten: text: "Hello World!"
.
Köra programmet
Du kan köra terminalskriptet kirigami_hello
utan att behöva installera det först:
pipx run --system-site-packages --spec . kirigami_hello
Väljaren --system-site-packages
behövs för att Python ska få tillgång till Python-paketen från distributionen. Det krävs eftersom Kirigami och PySide måste ha byggts mot samma Qt-version för att fungera, vilket är fallet när båda kommer från distributionen.
Väljaren --spec
bestämmer sökvägen till källkoden eller paketet wheel som har programmet, och kirigami_hello
är det körbara skriptet som ska köras.
För att bygga och installera Python-paketet, kör:
pipx install --force --system-site-packages .
Paketet installeras i ~/.local/share/pipx/venvs/kirigami-python
, och ett körbart skript installeras i ~/.local/bin/kirigami_hello
.
Användning av pipx eller pip
Till skillnad från Python med Kirigami: Skapa ett Python-paket, använde den här handledningen pipx
för att göra det lättare att köra och installera projektet. Samma steg kan göras manuellt med venv
, build
och pip
som i den mer kompletta handledningen.
pipx
är användbart och rekommenderas enligt PEP 668 för att köra Python-program, medan pip
är multifunktionellt och kan även användas för importerbara Python-moduler.
Därefter kan programmet startas genom att köra:
kirigami_hello
För att köra den nya QML-applikationen i mobilläge kan man använda QT_QUICK_CONTROLS_MOBILE=1
:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_hello
Se där! Nu dyker ditt allra första Kirigami-program upp framför dina ögon.