fbpixel

Pour créer vos interface avec Qt sous Python, il existe un outil graphique Pyside Designer permettant de dessiner et définir des Interfaces Homme-Machine (IHM). Nous avons vu précédemment comment créer des interfaces graphique à l’aide de PySide et PyQT, nous allons voir dans ce tutoriel comment utiliser PySide designer pour obtenir le même résultat.

Intérêt de l’utilisation du designer

  • muli langage

Le designer va créer un fichier .UI qui peut être utilisé avec différent langage de programmation et peut être partagé.

  • indépendance affichage/logique

On va pouvoir conserver la séparation entre l’affichage et la logique

Installation

Comme pour tout nouveau projet, il est conseillé de créer une environnement virtuel afin de mieux contrôler les versions de paquets installées.

mkdir pyihm && python -m venv pysideenv

Pour activer l’environnement virtuel,

./pysideenv/Scripts/activate

N.B.: sur Windows 11, vous pouvez rencontrer des difficultés pour charger l’environnement virtuel. Pour corriger ce problème, exécutez cette commande dans un terminal powerShell

powershell Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

Les outils nécessaires à l’utilisation de pyside designer sont installés avec le paquet PySide6

pip install pyside6

Pour lancer l’interface graphique, entrée la ligne de commande suivante

pyside6-designer
pyside-designer-main-window Créer un interface graphique avec Pyside Designer

Sur la colonne de gauche, on retrouve une collection de widgets existants, au milieu le design de la fenêtre et à droite l’explorateur et éditeur de propriétés.

Dans un premier temps, on ajoute plusieurs objets à la fenêtre que l’on place sur la fenêtre en s’aidant des layouts (horizontal, vertical, grid)

image-16 Créer un interface graphique avec Pyside Designer

Il est ensuite recommandé de changer les noms des objets pour y faire référence simplement.

image-17 Créer un interface graphique avec Pyside Designer

Vous pouvez ensuite modifier les propriétés en fonction du besoin

Et définir le style de la fenêtre avec la propriété styleSheet

image-14 Créer un interface graphique avec Pyside Designer

Ou vous pouvez spécifier le style dans un fichier qss (ou css) que vous chargez au démarrage de l’application

app.setStyleSheet(open("myqtui_style.css").read())
QPushButton#runtest {
    background-color: red;
    border-style: outset;
    border-width: 2px;
    border-radius: 10px;
    border-color: orange;
    font: bold 14px;
    min-width: 10em;
    padding: 6px;
}

QPushButton#runtest:pressed {
    background-color: rgb(0, 240, 0);
    border-style: inset;
}

Générer le script de gestion

Une fois la fenêtre dessinée, vous pouvez générer le script de gestion de l’interface avec la commande pyside6-uic

pyside6-uic your_file.ui -o ui_your_file.py
pyside6-uic myqtui.ui -o myqtui.py

Pour tester l’interface, vous pouvez laisser le fichier généré tel quel et l’importé dans un autre script myqtui_test.py

from custom_widget import Ui_MainWindow
from PySide6 import QtWidgets

class MyWidget(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

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

Implémentation de la logique de l’application

Le fonctionnement de l’application peut être définit dans le script de test, indépendamment du rendu de l’interface. Dans notre exemple, nous mettons à jour le texte et la police de la zone de texte.

from myqtui import Ui_MainWindow
from PySide6 import QtWidgets

class MyWidget(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.runtest.clicked.connect(self.run_test)

    def run_test(self):
        input_text = self.ui.input.text()
        font = self.ui.fontComboBox.currentFont()
        font.setPointSize(20);

        self.ui.output.setFont(font);
        self.ui.output.setPlainText(input_text)

        self.statusBar().showMessage(f"Display text with font {font.family()} successfully", 2000)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(open("myqtui_style.css").read())
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec())

Pour lancer l’interface

python -m myqtui_test
image-18 Créer un interface graphique avec Pyside Designer

Afin de modifier l’interface, vous pouvez retourner dans l’interface du designer puis générer le script (pyside6-uic) sans modification de la logique.

Source