PyQt/Quelques explications
Ce premier exemple permet d'introduire quelques concepts de base.
Importation des librairies
[modifier | modifier le wikicode]En premier lieu, il faut indiquer à Python d'importer les librairies PyQt et sys. Ceci est fait avec les lignes suivantes :
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
La méthode main
[modifier | modifier le wikicode]Nous définissons ensuite une méthode main qui s'occupera de gérer l'ensemble du programme.
Cette méthode crée en premier lieu une instance de QApplication
. Cette instance représente
l'ensemble de notre application, par conséquent elle est essentielle et doit rester unique pour
assurer un fonctionnement correct.
Toute application PyQt est constituée d'un objet de type QApplication
. Par conséquent, une
application débute toujours par la création d'un objet de la classe QApplication
:
app=QApplication(args)
Veuillez noter toutefois que si vous développez une classe dans laquelle la référence vers QApplication
n'est pas disponible (typiquement lors de la création de votre propre widget), Qt met
à disposition la variable qApp
fournissant une référence vers l'application Qt. Vous pouvez donc
sans autre utiliser cette variable dans votre code.
Création d'un bouton
[modifier | modifier le wikicode]Un bouton est un objet de la classe QPushButton
créé comme tout autre objet par l'appel de son
constructeur :
button=QPushButton("Hello World !", None)
Les widgets ne sont pas visibles lors de leur création, c'est pourquoi la méthode show
de la classe
QWidget
est appliquée à l'objet button
afin de le rendre visible. Néanmoins, si vous déclarez un
widget comme enfant d'un autre, un appel à show sur le parent affichera automatiquement tous
ses enfants.
button.show()
Gestion des évènements
[modifier | modifier le wikicode]L'exemple utilise deux événements : l'application quitte lorsque l'utilisateur clique sur le bouton
précédemment défini ou lorsqu'il ferme la fenêtre.
La méthode statique connect
de la classe QObject
établit une communication unidirectionnelle
entre deux objets. À chaque objet de la classe QObject
ou de ses classes dérivées, peuvent être
associés des signaux permettant d'envoyer des messages et des slots permettant de recevoir des
messages. De manière plus rigoureuse, un slot correspond à tout élément pouvant être appelé tandis qu'un signal est le message qui est passé entre objets.
Le fonctionnement est le suivant : les objets héritant de QObject
émettent des signaux quand ils
reçoivent des événements. Ces signaux peuvent être connectés à des slots, qui sont donc appelés
automatiquement quand l'objet reçoit un événement donné. L'objet émetteur du signal ne se
soucie pas de l'existence d'un objet susceptible de recevoir son signal. Cela assure une bonne
encapsulation ainsi qu'un mécanisme modulaire.
Un même signal peut être connecté à plusieurs slots, tout comme plusieurs signaux peuvent viser
le même slot.
Dans le cas de notre exemple, deux signaux sont connectés au même slot :
#fin de l'application lorsque toutes les fenêtres sont fermées
app.connect(app,SIGNAL("lastWindowClosed()"),app,SLOT("quit()"))
#fin de l'application lorsque l'utilisateur clique sur le bouton
app.connect(button, SIGNAL("clicked()"),app,SLOT("quit()"))
Les signaux « lastWindowClosed()
» de l'objet app et « clicked()
» de l'objet button
sont tous
deux connectés au slot « quit()
» par l'appel à la méthode connect.
Lorsque les widgets sont définis, la méthode exec_
de la classe QApplication
met en place
la boucle d'événements. C'est grâce à cette boucle (infinie) que l'application va fonctionner et
que les divers événements auront le comportement voulu.
#boucle principale de traitement des évènements
app.exec_()