2. Communication par des propriétés
contextuelles
Une fois le moteur d'exécution Qt Quick accessible, on peut s'intégrer en profondeur
avec l'application lancée. Le moyen le plus simple de le faire est de créer des
propriétés contextuelles, c'est-à-dire des propriétés dont la valeur est imposée à
l'extérieur de Qt Quick, par le code Python. Quand ces propriétés sont ajoutées au
contexte global, elles correspondent à des variables globales.
Une propriété contextuelle est définie sur un contexte, généralement le contexte à la
racine, accessible à travers le moteur d'exécution de Qt Quick :
engine.rootContext(). Une fois un contexte obtenu, la méthode
setContextProperty lie le nom d'une telle propriété (donnée en premier argument)
avec sa valeur (deuxième argument).
Côté Python :
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.quit.connect(app.quit)
engine.rootContext().setContextProperty("pythonText", "Je suis un
rectangle.")
engine.load("main.qml")
sys.exit(app.exec_())
Côté QML :
// …
Text {
// …
text: pythonText
color: "darkblue"
}
Figure 19.1 : Texte affiché depuis une propriété contextuelle définie dans le code Python
382
contextuelles
Une fois le moteur d'exécution Qt Quick accessible, on peut s'intégrer en profondeur
avec l'application lancée. Le moyen le plus simple de le faire est de créer des
propriétés contextuelles, c'est-à-dire des propriétés dont la valeur est imposée à
l'extérieur de Qt Quick, par le code Python. Quand ces propriétés sont ajoutées au
contexte global, elles correspondent à des variables globales.
Une propriété contextuelle est définie sur un contexte, généralement le contexte à la
racine, accessible à travers le moteur d'exécution de Qt Quick :
engine.rootContext(). Une fois un contexte obtenu, la méthode
setContextProperty lie le nom d'une telle propriété (donnée en premier argument)
avec sa valeur (deuxième argument).
Côté Python :
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.quit.connect(app.quit)
engine.rootContext().setContextProperty("pythonText", "Je suis un
rectangle.")
engine.load("main.qml")
sys.exit(app.exec_())
Côté QML :
// …
Text {
// …
text: pythonText
color: "darkblue"
}
Figure 19.1 : Texte affiché depuis une propriété contextuelle définie dans le code Python
382
