Communiquer avec Python
Niveau : intermédiaire à avancé
Objectifs : communiquer entre les parties Qt Quick et Python d'une application
Prérequis : Premiers pas avec Qt Quick, Présentation de JavaScript, Utiliser la
méthodologie modèle⁠ -⁠ vue, Créer un composant réutilisable
Qt Quick, en tant que tel, est un environnement prévu presque exclusivement pour le
développement d'interfaces graphiques. Dès qu'il s'agit de sortir de ce cadre, on bute
rapidement sur ses limites :
l'accès aux bases de données se fait par LocalStorage, un module relativement
simple… mais restreint et sans possibilité de réutiliser du code existant (par
exemple, en cas d'ajout d'une interface graphique par-dessus une application
existante) ;
il est impossible d'écrire des fichiers (pour de la lecture, il est possible
d'exploiter XMLHttpRequest et la transparence réseau) ;
certaines opérations sont extrêmement lentes à effectuer en JavaScript (à moins de
passer beaucoup de temps à peaufiner une implémentation), alors qu'il est souvent
possible de réutiliser une bibliothèque Python déjà optimisée. D'ailleurs, une très
grande partie des composants livrés avec Qt Quick n'est pas implémentée en
QML, mais bien directement en C++ (il aurait été possible de le faire en Python),
pour des raisons de performance.
Pour toutes ces choses et bien d'autres, il s'avère nécessaire de sortir du cadre strict de
Qt Quick et du code JavaScript uniquement. Ça tombe bien, tout est prévu : écrire des
extensions en Python est une chose relativement aisée.
PyQt offre deux manières de procéder pour assurer la communication entre les deux
environnements :
d'un côté, l'exposition de propriétés contextuelles, c'est-à-dire de nouvelles
variables (et, potentiellement, un objet avec ses méthodes) ;
de l'autre, la création d'un nouveau composant Qt Quick (comme un modèle), qui
377
Précédent

- 378/494

Suivant