summaryrefslogtreecommitdiff
path: root/README.md
blob: 826a6c1ea1367287d3e3b7bcff4701cbdb9fcfd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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`.