Hello World avec PyQt

Un article de Mangue.org, l'encyclopéde libre.

Le minimum


Voici l'exemple le plus classique qui soit en informatique : le fameux Hello world ! C'est l'application la plus simple écrite en PyQt.


import sys
from qt import *
 
def run():
    app = QApplication(sys.argv)
    label = QLabel("Hello world !",None)
    app.setMainWidget(label)
    label.show()
    app.exec_loop()
 
if __name__ == '__main__':
    run()


Comme vous le voyez, rien de bien difficile. Les deux premières lignes permettent de charger les modules système et Qt. Puis nous créons un contexte d'application en appelant la classe QApplication qui prend en paramètre les arguments de la ligne de commande. Ensuite nous ajoutons un objet de type label qui contient uniquement un texte. A la ligne suivante nous désignons le label comme widget principal de l'application. C'est cette action qui permet, si jamais nous cliquons sur la croix pour clore la fenêtre de terminer le processus lié à l'application. Sans cela, il resterait en arrière plan. Puis nous rendons visible le label et nous lançons enfin la boucle de gestion d'évènements de Qt.


Remarque
  • Un widget est un terme anglais désignant les objets manipulés à l'écran comme un bouton, un champs d'édition, un label, un champs de texte, une table, etc.
  • Le minimumQt défini la boucle de traitement par la méthode exec(). Python possède déjà un mot réservé du même nom, par conséquent dans PyQt cette méthode s'appelle exec_loop().


Un évènement

Une interface sans interactions avec l'utilisateur n'a pas beaucoup d'intérêts. Transformons notre label précédent en bouton et ajoutons lui un évènement.


import sys
from qt import *
 
def run():
    app = QApplication(sys.argv)
    btn = QPushButton("Bye bye",None)
    app.connect(btn,SIGNAL("clicked()"),app,SLOT("quit()"))
    app.setMainWidget(btn)
    btn.show()
    app.exec_loop()
 
if __name__ == '__main__':
    run()


Peu de différences. Nous avons créé un bouton cliquable ayant comme label "Bye bye". Qt fonctionne sur le modèle de signaux/slots. Sans rentrer dans les détails, Qt permet d'attacher un signal émis par un objet à un autre objet qui lui possède un récepteur, ou une méthode dite de callback qui est exécutée lorsque le signal est déclanché. Dans notre cas, nous avons indiqué que lorsque l'application connecte le signal clicked de l'objet bouton au signal quit de l'application.

Outils personels