Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Tutoriel Complet PyQt5 : Construire des GUIs Professionnelles en Python

Qu'est-ce que PyQt ?

PyQt est un binding Python pour le framework Qt, une bibliothèque C++ multiplateforme utilisée pour créer des applications GUI natives sur Windows, macOS, Linux, Android, iOS, Raspberry Pi, et plus. Le binding est maintenu par Riverbank Computing (UK), tandis que Qt est développé par The Qt Company (Finlande). PyQt donne aux développeurs Python accès au riche ensemble de widgets, networking, base de données, 3D, et capacités multimédia de Qt.

Dans ce tutoriel vous apprendrez :

Fonctionnalités Clés de PyQt5

PyQt5 expose plus de 600 classes couvrant :

Ces capacités permettent de construire des applications desktop et embarquées complexes, haute performance. De grandes entreprises comme LG, Mercedes-Benz, AMD, Panasonic et Harman s'appuient sur Qt pour leurs stacks UI.

Versions PyQt

Riverbank Computing propose deux bindings principaux :

De plus, PyQt3D fournit des bindings Python pour le framework Qt3D, utile pour rendu 3D temps réel et simulation.

Installation de PyQt5

Deux méthodes d'installation courantes sont décrites ci-dessous. Nous recommandons l'utilisation de packages wheel car ils incluent les binaires C++ compilés et évitent les longs processus de build.

Méthode 1 : Installation via Wheels (Recommandée)

  1. Ouvrez votre terminal ou invite de commande préféré.
  2. Exécutez pip install PyQt5 pour télécharger le wheel (≈ 50 Mo).
  3. Vérifiez que l'installation se termine avec succès.

Exemple sur Windows :

Tutoriel Complet PyQt5 : Construire des GUIs Professionnelles en Python
pip install PyQt5

Une fois installé, vous pouvez importer PyQt5.QtWidgets et commencer à construire des applications.

Méthode 2 : Build depuis les Sources

La compilation depuis les sources est plus complexe car elle compile du code C++. Elle n'est nécessaire que si vous avez besoin de modifications personnalisées ou si le wheel pour votre plateforme n'est pas disponible.

Fondamentaux de la Programmation PyQt5

Voici un exemple minimal ouvrant une fenêtre 300×300 intitulée « Guru99 ». Chaque ligne est annotée pour la clarté.

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Explication :

Ajouter de l'Interactivité

L'exemple suivant ajoute un label, un bouton, et une boîte de message qui apparaît quand le bouton est cliqué. Il démontre les signaux et slots, le cœur du système d'événements Qt.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Votre allégeance a été notée")
    mbox.setDetailedText("Vous êtes maintenant un disciple et sujet du Guru omniscient")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Voici le Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Vu", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

Cliquer le bouton déclenche dialog(), qui crée un QMessageBox modal.

Composants Cœur et Widgets

L'architecture PyQt5 est organisée en plusieurs modules. Comprendre cette hiérarchie aide à importer seulement ce dont vous avez besoin.

Vue d'Ensemble des Modules

Widgets Courants

Gestion de Layout

Au lieu de positionner manuellement les widgets avec move() et resize(), Qt offre des gestionnaires de layout qui arrangent automatiquement les widgets selon la taille de fenêtre.

Box Layouts (HBox & VBox)

QHBoxLayout arrange widgets horizontalement ; QVBoxLayout verticalement.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Mousquetaires")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

Remplacez QHBoxLayout par QVBoxLayout pour empiler les boutons verticalement.

Grid Layout

Organisez widgets en grille 2D. La méthode addWidget() accepte indices ligne et colonne plus row-span/column-span optionnels.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

Thèmes Personnalisés et Styles

PyQt5 supporte thèmes natifs et stylesheets personnalisés.

Thèmes Intégrés

Définissez le style d'application avec app.setStyle("Fusion") ou tout autre style disponible.

app = QApplication([])
app.setStyle("Fusion")

Personnalisation de Palette

Utilisez QPalette pour modifier couleurs widgets programmatiquement.

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt Style Sheets (CSS-like)

Pour stylisation avancée, appliquez stylesheets directement aux widgets ou à l'application entière.

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

Points Clés à Retenir

Python

  1. Maîtriser str.count() de Python : Compter caractères et sous-chaînes avec exemples
  2. Maîtriser les chaînes format() en Python avec exemples clairs
  3. Maîtriser la méthode String.find() de Python : Syntaxe, Exemples et Alternatives
  4. Maîtriser les fonctions lambda Python : exemples pratiques et bonnes pratiques
  5. Fonction Python round() expliquée avec exemples pratiques
  6. Maîtriser la fonction Python map() : syntaxe, exemples et bonnes pratiques
  7. Python timeit() : mesurer le temps d'exécution avec exemples pratiques
  8. Python Counter dans collections : comptage efficace, mise à jour et opérations arithmétiques
  9. Comprendre type() et isinstance() en Python : exemples pratiques