Portál AbcLinuxu, 6. května 2025 06:50
Úplně jsem nepochopil, k čemu to je dobrý. Díky tomu můžu nahradit v QML JavaScript Pythonem? Nebo jak to funguje?Ne úplně, ale tak daleko od pravdy to taky není - PyOtherSide umoňuje z pomocí Python QML elementu volat z QML Pythoní kód. Volání může být jak synchronní tak plně asynchronní a Pythoní kód také může zpět do QML posílat signály. Prostě taková celkem lehká ale dost mocná RPC vrstva. Mezi hlavní výhody patří možnost plně asynchronní komunikace Python<->Qt/AML, rychlý start (QML aplikace startuje jako první a Python si asynchronne načte až potřebuje) a celkově malou velikost zdrojového kódu (PySide byl kolikrát problém vůbec skompilovat). Mezi nevýhody může teoreticky pro někoho patřit to, že se nejedná o klasické bindingy které obalují všechny třídy v Qt ale opravdu jen lehkou RPC vrstvu mezi Pythonem a QML. Osobně jsem s tím však zatím neměl v mých projektech problém. Nejlepší je asi podívat se na příklady nebo do dokumentace jak se to používá.
Úplně si nejsem jistý, kde PySide dneska použít.PyOtherSide je k dispozici v repositářích minimálně Fedory, Debianu a Ubuntu a pravděpodobně i dalších distribucí. Co se mobilních platforem týče je možné PyOtherSide použít pro tvorbu aplikací minimálně pro SailfishOS (Jolla) a pro Android.
Všetky tie príklady sú Python, takže dosť pochybujem, že sa ako prvý nenačítava práve Python.Koukni třeba na ten notes example: Pouští se to pomocí:
qmlscene notes_example.qml
Je pravda, že to možná natáhne libpython nebo něco takového. A i to by se dalo pořešit kdyby to byl problém - stačí ten import (import io.thp.pyotherside 1.0) a vytvoření Python elementu hodit do samostatného QML souboru, který se načte, až když je Python potřeba. A podobně to jde dělat i s aplikačním kódem díky podpoře asynchroního načítání pythoních modulů.
Celkově hlavní výhoda je, že to vůbec jde udělat - klasické bindingy pokud vím nejen, že vždy natáhnou Python, ale i tisíc šilených wrapperu pro všemožné Qt třídy čistě pro jistotu - kdyby je tvůj kód náhodou chtěl použít. Už jen ve velikosti binárek tam byl dost velký rozdíl: asi 6-7 MB pro PySide vs 150 kB pro PyOtherSide.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.