4. Appel direct de code Python
Une approche alternative pour effectuer la communication entre Python et Qt Quick est
d'appeler directement des fonctions Python depuis le code QML, sans vraiment
chercher à comprendre le fonctionnement de PyQt. Par défaut, PyQt ne propose rien en
ce sens ; ce manque est comblé par l'extension PyOtherSide. Quelques paquets
précompilés existent déjà pour Linux, mais il faut le compiler pour les autres
plateformes.
La communication se fait à l'aide d'un composant Python :
import io.thp.pyotherside 1.5
Python {
id: python
Component.onCompleted: {
// …
}
}
Les opérations sont asynchrones : l'opération à effectuer est transférée à Python et, du
côté Qt Quick, la fonction JavaScript correspondante renvoie directement sa valeur.
C'est pour ça que toutes les opérations PyOtherSide prennent, en dernier argument, une
fonction anonyme : dès que l'opération demandée est effectuée, cette fonction est
appelée.
import io.thp.pyotherside 1.5
Python {
id: python
property bool ready: false
Component.onCompleted: { importModule("json", function() { ready = true })
} }
Cette propriété prend la valeur booléenne vraie dès que le composant peut être
utilisé.
La première opération possible est d'importer un module Python, ici json.
391
Une approche alternative pour effectuer la communication entre Python et Qt Quick est
d'appeler directement des fonctions Python depuis le code QML, sans vraiment
chercher à comprendre le fonctionnement de PyQt. Par défaut, PyQt ne propose rien en
ce sens ; ce manque est comblé par l'extension PyOtherSide. Quelques paquets
précompilés existent déjà pour Linux, mais il faut le compiler pour les autres
plateformes.
La communication se fait à l'aide d'un composant Python :
import io.thp.pyotherside 1.5
Python {
id: python
Component.onCompleted: {
// …
}
}
Les opérations sont asynchrones : l'opération à effectuer est transférée à Python et, du
côté Qt Quick, la fonction JavaScript correspondante renvoie directement sa valeur.
C'est pour ça que toutes les opérations PyOtherSide prennent, en dernier argument, une
fonction anonyme : dès que l'opération demandée est effectuée, cette fonction est
appelée.
import io.thp.pyotherside 1.5
Python {
id: python
property bool ready: false
Component.onCompleted: { importModule("json", function() { ready = true })
} }
Cette propriété prend la valeur booléenne vraie dès que le composant peut être
utilisé.
La première opération possible est d'importer un module Python, ici json.
391
