Créez une interface graphique Qt pour vos scripts Python

30 mars 2016 · 3 min de lecture

Un script Python en ligne de commande c’est bien, mais la majorité des utilisateurs préfèrent utiliser une belle fenêtre avec des cases à cocher et des boutons.

Tkinter est la bibliothèque graphique d’origine pour Python. Il existe aussi Qt, un framework multiplateforme. Le logiciel Qt Designer permet de créer des interfaces graphiques dans un environnement convivial. Il suffit de glisser-déposer les composants.

Installation

Linux

Téléchargez et installez la version Open Source de Qt sur le site officiel.

Installez PyQt5, le module libre liant le langage Python avec la bibliothèque Qt :

sudo apt-get install python3-pyqt5

Installez l’utilitaire pyuic5 qui permet de convertir une interface graphique en code Python :

sudo apt-get install pyqt5-dev-tools

Python 3 est normalement installé par défaut.

Windows

Téléchargez et installez :

Création de l’interface

Démarrez Qt Creator.

qtcreator

Cliquez sur Nouveau projet, choisissez Application Qt avec widgets puis kit Desktop pour une application “ordinateur de bureau”. Laissez les autres paramètres par défaut.

On va ignorer le code C++ généré automatiquement. Ce qui nous intéresse c’est le fichier mainwindow.ui. Pour information, il s’agit d’un fichier XML décrivant la fenêtre et ses composants. Double-cliquez dessus pour passer en mode Design :

qt_mainwindow

Créons une fenêtre avec une liste d’éléments (QListWidget) et un bouton :

qt_fenetre

Il est possible d’avoir un aperçu du résultat en cliquant sur le bouton suivant en bas à gauche :

qt_lecture

En ligne de commande, placez-vous dans le dossier du projet et tapez :

pyuic5 mainwindow.ui -x -o gui.py

Vous disposez maintenant d’un script Python nommé gui.py contenant tout le code nécessaire pour exécuter l’interface graphique. Vous pouvez le visualiser par curiosité, mais il est inutile de le modifier, car vous l’écraserez avec la commande précédente à chaque mise à jour de l’interface.

Le script est exécutable et affiche la fenêtre :

python3 gui.py

Nous donne :

qt_fenetre_python

Mais le bouton ne fonctionne pas et la liste est vide ! Et oui, c’est à vous de coder les actions que vous souhaitez effectuer sur ces objets.

Voici un script qui utilise cette fenêtre, remplit la liste avec des chiffres et définit des évènements lorsqu’on clique sur les composants. Nommez-le comme vous voudrez :

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5 import QtWidgets
import gui  # import du fichier gui.py généré par pyuic5

class MyWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.ui = gui.Ui_MainWindow()
        self.ui.setupUi(self)
        
        # un clic sur le bouton appellera la méthode 'action_bouton'
        self.ui.pushButton.clicked.connect(self.action_bouton)

        # on rempli la liste avec des chiffres
        for i in range(20):
            self.ui.listWidget.addItem(str(i))

        # un clic sur un élément de la liste appellera la méthode 'on_item_changed'
        self.ui.listWidget.currentItemChanged.connect(self.on_item_changed)

        # on affiche un texte en bas de la fenêtre (status bar)
        self.ui.statusBar.showMessage("coucou")
    
    def action_bouton(self):
        print('Appui bouton.')

    def on_item_changed(self):
        print(self.ui.listWidget.currentItem().text())

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

Vous pouvez faire évoluer votre fenêtre dans Qt Creator, ajouter des éléments, modifier leur taille… et recommencer les étapes ci-dessus.

PARTAGER

A LIRE EGALEMENT