From 5c369a5d98dbab80903dfcb7c52625c78228e789 Mon Sep 17 00:00:00 2001 From: "afix.space" Date: Thu, 9 Jul 2026 19:34:22 +0200 Subject: feat: PySide6 dev environment with runnable examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake devShell (PySide6 6.11 on Python 3.13, designer, uic/rcc from qtbase libexec, offline docs) plus hello_widgets and hello_quick examples. QML_IMPORT_PATH exported — nixpkgs PySide6 finds platform plugins on its own but not QML imports; see README. --- README.md | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 README.md (limited to 'README.md') diff --git a/README.md b/README.md new file mode 100644 index 0000000..826a6c1 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +# Qt for Python development environment + +Environnement PySide6 (binding Qt officiel) sur Python 3.13, versions +alignées avec le C++ de `~/projects/qt-dev` (Qt 6.11). + +## Entrer dans l'environnement + +```bash +cd ~/projects/qt-python-dev +nix develop +``` + +## Lancer les exemples + +```bash +python examples/hello_widgets.py # app Widgets (signals/slots) +python examples/hello_quick.py # app QML/Qt Quick +``` + +Pas de compilation : Python + QML chargé à l'exécution. Itération +instantanée — c'est l'avantage principal sur le C++. + +## Outils disponibles + +| Commande | Rôle | +|----------|------| +| `designer` | éditeur de fichiers .ui | +| `uic -g python fichier.ui -o ui_fichier.py` | compiler un .ui en module Python | +| `rcc -g python ressources.qrc -o rc.py` | compiler des ressources | +| `linguist` | traduction (.ts) | +| `assistant` | doc offline | + +Note : le paquet nixpkgs ne fournit pas les wrappers `pyside6-uic`/ +`pyside6-rcc` de PyPI — mais `uic`/`rcc` de qtbase (sur le PATH du +shell) génèrent du Python nativement avec `-g python`, c'est le même +résultat. + +Workflow Designer typique : dessiner dans `designer`, générer avec +`uic -g python`, importer la classe générée dans son code. + +## Documentation + +- Doc Qt offline dans `$QT_DOCS` (enregistrer dans Assistant : + Préférences → Documentation → Ajouter). +- Doc PySide6 spécifique (API Python) : https://doc.qt.io/qtforpython-6/ +- La doc C++ reste utile : l'API Python est un mapping quasi 1:1. + +## PySide6 vs PyQt6 + +Les deux sont dans nixpkgs (`python3Packages.pyside6` / `.pyqt6`), +mêmes versions. PySide6 choisi ici : binding **officiel** Qt, licence +LGPL (PyQt6 est GPL/commercial). API quasi identique — migration +triviale dans les deux sens (`Signal` vs `pyqtSignal`, etc.). + +## Notes NixOS + +- Les **plugins de plateforme** sont trouvés automatiquement (chemins + compilés dans le Qt de nixpkgs), mais **pas les imports QML** : sans + le `QML_IMPORT_PATH` exporté par le shellHook, tout `import QtQuick` + échoue avec « module is not installed ». +- **Ne pas faire `pip install pyside6`** dans un venv sur NixOS : le + wheel PyPI embarque ses propres libs Qt liées contre une glibc/ABI + générique — segfaults et conflits garantis. Toujours passer par + `python3Packages.pyside6`. +- Session Wayland GNOME : fonctionne nativement ; forcer X11 si besoin + avec `QT_QPA_PLATFORM=xcb`. -- cgit v1.3.1