Accès rapide :
La vidéo
La notion d'application Qt
Mise en oeuvre de notre première classe de fenêtre
On instancie la fenêtre et on l'affiche
Cette nouvelle vidéo vous montre comment créer la fenêtre principale de votre application graphique. Les moyens d'obtenir de l'aide sur le sujet, vous sont aussi présentés.
Quand on veut définir une application Qt, la première des choses à faire consiste à instancier l'objet d'application. Il est de type
QApplication
. Cette instance va permettre la gestion
du flux de contrôle et les paramètres principaux de votre application graphique.
Si vous souhaitez permettre à l'utilisateur de votre application de changer certains paramétrages (notamment, le thème graphique de l'application), il faut
repasser les paramètres spécifiés sur la ligne de commande (la liste sys.argv
) au constructeur de l'application.
La méthode exec
va permettre de rentrer dans la boucle de gestion des événements.
Voici un premier exemple de code montrant le démarrage de l'application.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import sys from PySide6.QtWidgets import QApplication if __name__ == "__main__": # On crée l'instance d'application en lui passant le tableau des arguments. app = QApplication(sys.argv) # TODO : Instancier et afficher votre fenêtre graphique. # On démarre la boucle de gestion des événements. sys.exit(app.exec()) |
$> python Sample.py -style fusion
exec_
en lieu et place de la méthode
exec
.
Une fois l'application définie, il faut maintenant passer à la définition de votre fenêtre. Cela se fait en utilisant le concept d'héritage.
Pour faire simple, Qt propose la classe QMainWindow
:
cette classe représente le concept de fenêtre principale de votre application graphique et, par défaut, une telle fenêtre est vierge.
Vous allez vous servir de cette classe pour définir votre propre fenêtre en finalisant sa construction à votre convenance.
L'exemple ci-dessous change quelques caractéristiques de votre fenêtre (le titre, l'icône et sa taille).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# On définit une classe de fenêtre par héritage. class MyWindow(QMainWindow): # Le constructeur de la classe nous permet de changer quelques caractéristiques. def __init__(self): # Appel au constructeur parent (QMainWindow). super().__init__() # On change le titre de la fenêtre. self.setWindowTitle("Ma première fenêtre Qt avec Python") # On change l'icône affichée dans le bandeau supérieur de la fenêtre. self.setWindowIcon(QIcon("icons/file.png")) # On retaille la fenêtre (800 pixels de large et 600 en hauteur). self.resize(800, 600) |
Il ne reste plus que deux étapes pour apercevoir notre fenêtre à l'écran. La première étape consiste à utiliser notre classe MyWindow
pour produire une instance. Par défaut, une fenêtre est créée cachée afin de vous laisser le temps de la construire sans qu'on puisse voir les widgets
(les composants graphiques) y apparaître progressivement : nous verrons cette étape dans le prochain chapitre. Une fois la fenêtre instanciée, il ne
reste plus qu'à l'afficher en y invoquant la méthode show
.
Voici le code complet de notre première fenêtre graphique avec PySide6/Qt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import sys from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication, QMainWindow # On définit une classe de fenêtre par héritage. class MyWindow(QMainWindow): # Le constructeur de la classe nous permet de changer quelques caractéristiques. def __init__(self): # Appel au constructeur parent (QMainWindow). super().__init__() # On change le titre de la fenêtre. self.setWindowTitle("Ma première fenêtre Qt avec Python") # On change l'icône affichée dans le bandeau supérieur de la fenêtre. self.setWindowIcon(QIcon("icons/file.png")) # On retaille la fenêtre (800 pixels de large et 600 en hauteur). self.resize(800, 600) if __name__ == "__main__": # On crée l'instance d'application en lui passant le tableau des arguments. app = QApplication(sys.argv) # On instancie une fenêtre graphique et l'affiche. myWindow = MyWindow() myWindow.show() # On démarre la boucle de gestion des événements. sys.exit(app.exec()) |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :