Configuration de l'environnement de développement avec PySide2

Installation de la bibliothèque

Pour débuter avec PySide2, l'installation s'effectue simplement via le gestionnaire de paquets pip :

pip install PySide2

Référentiel de documentation

La documentation officielle de Qt for Python constitue une ressource essentielle pour maîtriser l'API :

https://doc.qt.io/qtforpython/

Workflow de développement avec Qt Designer

La création d'une interface graphique repose sur trois phases principales :

  1. Conception visuelle avec Qt Designer.
  2. Conversion du fichier .ui en module Python.
  3. Intégration et initialisation de la fenêtre dans le script principal.

Conception de la vue

L'utilitaire Qt Designer est fourni avec le paquet PySide2. Il se trouve généraelment dans le chemin d'installation de Python, sous Lib\site-packages\PySide2\designer.exe. Il est possible de le lier en tant qu'outil externe dans des EDI comme PyCharm pour plus d'efficacité.

Après avoir lancé l'application, créez un nouveau formulaire. Glissez-déposez un objet QLabel et un QPushButton sur la fenêtre, puis sauvegardez le fichier sous le nom main_window.ui.

Génération du code Python

La conversion du fichier XML généré par Designer en code Python se fait via la commande pyside2-uic dans un terminal positionné à la racine du projet :

pyside2-uic main_window.ui -o interface_generee.py

Cette commande produit un fichier contanant une classe représentant l'interface. Voici un exemple du résultat généré avec une structure adaptée :

from PySide2.QtCore import QRect, QMetaObject, QCoreApplication
from PySide2.QtWidgets import QWidget, QPushButton, QLabel

class GeneratedInterface(object):
    def setup_ui(self, container):
        if not container.objectName():
            container.setObjectName("Container")
        container.resize(450, 350)
        
        self.action_btn = QPushButton(container)
        self.action_btn.setObjectName("action_btn")
        self.action_btn.setGeometry(QRect(180, 220, 90, 30))
        
        self.info_lbl = QLabel(container)
        self.info_lbl.setObjectName("info_lbl")
        self.info_lbl.setGeometry(QRect(170, 100, 150, 25))

        self.translate_ui(container)
        QMetaObject.connectSlotsByName(container)

    def translate_ui(self, container):
        container.setWindowTitle(QCoreApplication.translate("Container", "Fenêtre Principale", None))
        self.action_btn.setText(QCoreApplication.translate("Container", "Cliquez ici", None))
        self.info_lbl.setText(QCoreApplication.translate("Container", "Bienvenue !", None))

Exécution et affichage de la fenêtre

Pour afficher l'interface, il faut instancier l'objet généré et le lier à une classe héritant de QMainWindow :

import sys
from interface_generee import GeneratedInterface
from PySide2.QtWidgets import QApplication, QMainWindow

class AppMainWindow(QMainWindow):
    def __init__(self):
        super(AppMainWindow, self).__init__()
        self.ui_instance = GeneratedInterface()
        self.ui_instance.setup_ui(self)

if __name__ == '__main__':
    app_context = QApplication(sys.argv)
    main_win = AppMainWindow()
    main_win.show()
    sys.exit(app_context.exec_())

Avec cette méthode, l'interface graphique est séparée de la logique applicative. Il est à noter que les composants créés avec des positions absolues ne s'adapteront pas auotmatiquement lors du redimensionnement de la fenêtre, nécessitant l'usage de gestionnaires de disposition (layouts) pour un rendu fluide.

Étiquettes: PySide2 Qt Designer Python Qt GUI

Publié le 27 juin à 04h47