Kirigami s Pytonom
Predpogoji
Preden začnemo, bomo morali namestiti Kirigami in PySide na naš računalnik.
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 |
Če uporabljate distribucijo s starimi paketi PySide6 ali PyQt6, ta vadnica deluje z Building software with distrobox.
Struktura projekta
Najprej ustvarimo našo projektno mapo (uporabite lahko spodnje ukaze). Našo vadnico bomo imenovali kirigami_python/
.
kirigami_python/
├── README.md
├── LICENSE.txt
├── MANIFEST.in # Za dodajanje naših datotek QML
├── pyproject.toml # Glavna datoteka za upravljanje projekta
├── org.kde.kirigami_python.desktop
└── src/
├── __init__.py # Za uvoz imenika src/ kot paket
├── __main__.py # Za signalizacijo aplikacije kot vstopne točke
├── app.py
└── qml/
└── Main.qml
Ime paketa bo kirigami_python
, "izvršljiva datoteka" (konzolni skript) se bo imenovala kirigami_hello
, in vstopna točka bo app
.
Nasvet
Če želite hitro ustvariti to strukturo map, kar zaženite:mkdir -p kirigami_python/src/qml/
.Za bolj obsežen projekt, ki gre v nadaljnje podrobnosti s to strukturo datoteke, glejte Celoten projekt v Python + Kirigami.
pyproject.toml
Sodobne aplikacije Python potrebujejo samo eno datoteko TOML, da določijo vsemetapodatke, informacije o paketu in odvisnosti od PEP 621. Naslednje služi kot dober začetek za aplikacijo in se lahko kasneje podaljša.
Večina vsebine v tej datoteki je okvirna in njeno bolj popolno različico si lahko ogledate v Python with Kirigami: General Structure.
|
|
Upoštevajte osvetljene vrstice. Kot je navedeno pod Project structure, je ime paketa je kirigami_python
,ime izvršljive datoteke je kirigami_hello
, ime vstopne točke je app
. Zlasti je treba opozoriti na naslednje:
- Projektni skript je sestavljen iz skripta vstopne točke, ki bo ustvarjens setuptools za zagon aplikacije, v tem primeru
kirigami_hello
. - Ustvarjeni projektni skript
kirigami_hello
zažene funkcijomain()
v skriptuapp.py
v paketukirigami_python
. - Privzeti
package-dir
za projekte v Pythonu je običajno korenski imenik.V tem primeru je to preglašeno s podimenikomsrc/
, tako da deluje, kot da je korenski imenik paketa. package-dir
je razlog, zakaj ustvarjeni skript projekta deluje kotkirigami_python→ app
namestokirigami_python → src → app
.package-dir
je tudi razlog, zakaj klicimportlib.resources.files()
v app.py deluje kotkirigami_python → qml → Main.qml
namesto kotkirigami_python → src → qml → Main.qml
.
Glejte Running directly, as a module, and as a console script za podrobnosti.
org.kde.kirigami_python.desktop
Glavni namen datotek za vnos namizja je prikazati vašo aplikacijo v zaganjalniku aplikacij v sistemu Linux. Drug razlog, da jih imate, so ikone oken na Waylandu, saj morajo sestavljavcu sporočiti "to okno gre s to ikono".
Slediti mora shemi poimenovanja obratne DNS - reverse-DNS naming scheme, ki mu sledi končnica .desktop
, kot je npr.org.kde.kirigami_python.desktop
:
|
|
Opomba
Ikone oken in opravilne vrstice bodo delovale v seji Wayland samo, če so aplikacijenamizne datoteke nameščene v~/.local/share/applications
ali /usr/share/applications
. Če želite, da bodo ikone delovale v tej vadnici, kopirajte namizje aplikacijedatoteko tja.MANIFEST.in
Ta datoteka je preprosto deklaracija dodatnih datotek izvorne kode, kimora biti prisoten v paketu, ko se aplikacija izvaja. Privzeto Python ne vključuje datotek QML v paketih in morajo biti na voljo da se aplikacija izvaja.
|
|
src/app.py
|
|
Ker je to aplikacija GUI, želimo, da se glavna funkcija izvaja samo, ko se izvaja skript in ne, ko je uvožen, zato potrebujemo pogoj if __name__ == "__main__"
na koncu datoteke. Glejte [Tek neposredno kot modul in kot konzolni skript - Running directly, as a module, and as a console script(/docs/getting-started/python/python-package#running-directly-as-a-module-and-as-a-console-script) za podrobnosti.
Ustvarimo aplikacijo QGuiApplication in inicializiramo stroj QML ter zQGuiApplication.exec()
aplikacija bo delovala, dokler se ne zapre.Nato importlib.resources.files()
zagrabi pot do datoteke, ki je prisotnav paketu namreč našo Main.qml
. S to potjo naložimo datoteko QMLv stroj QML kot glavno vstopno točko za aplikacijski vmesnik.
src/__init__.py
Ustvarite prazno datoteko kirigami_python/src/__init__.py
. Ta datoteka mora biti samo prisotna, da lahko uvozite imenik kot paket.
touch __init__.py
src/__main__.py
Ustvarite kirigami_python/src/__main__.py
z naslednjo vsebino:
|
|
To preprosto doda vsebino trenutnega imenika (src/
) in jo uvozikot modul z imenom app
, nato takoj zažene funkcijo main()
aplikacije.
src/qml/Main.qml
|
|
Tukaj bomo delali na ospredju naše aplikacije.
Če poznate nekaj Javascripta, se vam bo večina QML zdela znana (čeprav ima svoje posebnosti). Dokumentacija Qt vsebuje obsežno količino gradiva o tem jeziku, če želite nekaj poskusiti sami. Med temi učbenki bomo veliko pozornosti namenili naši kodi QML, kjer lahko uporabimo Kirigami, da ga kar najbolje izkoristimo.
Za zdaj se osredotočimo na Main.qml
. Najprej uvozimo številne pomembne module:
- QtQuick je standardna knjižnica, ki se uporablja v aplikacijah QML.
- QtQuick Controls, ki zagotavlja številne standardne kontrole, s katerimi lahko naše aplikacije naredimo interaktivne.
- QtQuick Layouts, ki ponuja orodja za postavitev komponent v okno aplikacij.
- Kirigami, ki zagotavlja številne komponente primerne za ustvarjanje aplikacij, ki delujejo po napravah različnih oblik in velikosti.
Opomba
Če postavite kontrole QtQuick in uvoze Kirigamija v ločene imenske prostore z uporabo ključne besede `as je najboljša praksa, ki zagotavlja, da nobene komponente z istim imenom ne morejo biti v sporu. Morda boste videli različna imena za QtQuick Controls na terenu, kot sta "QQC" ali "QQC2". Zaradi jasnosti bomo v tej vaji uporabljali "Controls".Nato pridemo do našega osnovnega elementa 'Kirigami.ApplicationWindow', ki zagotavlja nekaj osnovnih funkcij, ki so potrebne za vse Kirigami aplikacije. To je okno, ki bo vsebovalo vsako od naših strani, glavne odseke našega uporabniškega vmesnika.
Nato določimo lastnost okna določilnik 'id' na 'root'. Določilniki so uporabni, ker nam dovolijo edinstveno sklicevanje na komponento, tudi če jih imamo več iste vrste.
Nastavili smo tudi lastnost okna title
na "Hello World".
Nato nastavimo prvo stran na našem skladu strani. Večina aplikacij Kirigami je organizirana kot sklad strani, vsaka stran vsebuje povezane komponente, ki so prilagojene določeni nalogi. Za zdaj se držimo preprostega pravila in se držimo ene same strani. Sklad pageStack je v začetku prazen sklad strani, ki ga je v Kirigami.ApplicationWindow in z začetno stranjo pageStack.initialPage: Kirigami.Page {...}
nastavimo prvo stran, predstavljeno ob nalaganju aplikacije na ' Kirigami.Page, ki bo vsebovala vso našo vsebino.
Na koncu na naši strani vključimo v Controls.Label, ki nam dovoli, da besedilo postavimo na našo stran. Uporabljamo 'anchors.centerIn: parent' za centriranje naše oznake vodoravno in navpično znotraj našega nadrejenega elementa. V tem primeru je nadrejena komponenta oznake stran Kirigami.Page. Zadnja stvar, ki jo moramo storiti je, da nastavimo besedilo: text: "Hello World!"
.
Zagon aplikacije
Konzolni skript kirigami_hello
lahko zaženete, ne da bi vam ga bilo treba najprej namestiti:
pipx run --system-site-packages --spec . kirigami_hello
Zastavica --system-site-packages
je potrebna, da ima Python dostop do paketov Pythona iz vaše distribucije. To je potrebno, ker morata biti Kirigami in PySide zgrajena na isti različici Qt, da bi delovalo, kar oboje velja takrat, ko oba prihajata iz distribucije.
Zastavica --spec
določa pot do izvorne kode ali kolesnega paketa, ki ima program, kirigami_hello
pa je izvršljivi skript, ki naj bi tekel.
Za izgradnjo in namestitev Pythonovega paketa, zaženite:
pipx install --force --system-site-packages .
Paket bo nameščen v ~/.local/share/pipx/venvs/kirigami-python
in izvajalni skript bo nameščen v ~/.local/bin/kirigami_hello
.
Uporaba pipx v primerjavi s pip
Za razliko od Python s Kirigami: Ustvarjanje paketa Python - Python with Kirigami: Creating a Python package, je ta vadnica uporablja pipx
za lažjo izvedbo projekta in namestitev. Iste korake je mogoče izvesti ročno z venv
, build
in pip
kot v popolnejši vadnici.
pipx
je uporaben in priporočljiv v skladu s PEP 668 za izvajanje aplikacij v Pythonu, medtem ko je pip
večnamenski inse lahko uporablja tudi za uvožene module Pythona.
Po tem lahko aplikacijo startate tako, da zaženete:
kirigami_hello
Za zagon nove aplikacije QML v mobilnem načinu lahko uporabite QT_QUICK_CONTROLS_MOBILE=1
:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_hello
Voilà! Zdaj boste videli, da se vaša prva Kirigami aplikacija pojavi pred vašimi očmi.