summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorafix.space <laurent@afix.space>2026-07-09 19:34:22 +0200
committerafix.space <laurent@afix.space>2026-07-09 19:34:22 +0200
commit5c369a5d98dbab80903dfcb7c52625c78228e789 (patch)
treee17ac19cc282778dd14aa6cdac3b50481e55e9ea /README.md
feat: PySide6 dev environment with runnable examplesHEADmain
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.
Diffstat (limited to 'README.md')
-rw-r--r--README.md66
1 files changed, 66 insertions, 0 deletions
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`.