Aller au contenu

PyQt/Quelques explications

Un livre de Wikilivres.
PyQt
PyQt
PyQt
Introduction
Installation
Concepts de base
Quelques widgets
Utilisation de Qt Designer
Guide de traduction de Qt à PyQt
Annexes
Modifier ce modèle ce sommaire

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_()