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, which provides a number of components suited for creating applications that work across devices of different shapes and sizes.
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.We then come to our base element, Kirigami.ApplicationWindow, which provides some basic features needed for all Kirigami applications. This is the window that will contain each of our pages, the main sections of our UI.
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".
We then set the first page of our page stack. Most Kirigami applications are organised as a stack of pages, each page containing related components suited to a specific task. For now, we are keeping it simple, and sticking to a single page. pageStack is an initially empty stack of pages provided by Kirigami.ApplicationWindow, and with pageStack.initialPage: Kirigami.Page {...}
we set the first page presented upon loading the application to a Kirigami.Page. This page will contain all our content.
Finally, we include in our page a Controls.Label that lets us place text on our page. We use anchors.centerIn: parent
to center our label horizontally and vertically within our parent element. In this case, the parent component of our label is Kirigami.Page. The last thing we need to do is set its text: 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.