- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personCréer les widgets
Pour créer les boutons, nous allons utiliser un dictionnaire qui contiendra le texte à afficher sur chaque bouton ainsi que les coordonnées du bouton en X et Y ainsi que la taille qu'ils doivent occuper sur la grille de notre layout :
BUTTONS = {"C": (1, 0, 1, 1),
"/": (1, 3, 1, 1),
"7": (2, 0, 1, 1),
"8": (2, 1, 1, 1),
"9": (2, 2, 1, 1),
"x": (2, 3, 1, 1),
"4": (3, 0, 1, 1),
"5": (3, 1, 1, 1),
"6": (3, 2, 1, 1),
"-": (3, 3, 1, 1),
"1": (4, 0, 1, 1),
"2": (4, 1, 1, 1),
"3": (4, 2, 1, 1),
"+": (4, 3, 1, 1),
"0": (5, 0, 1, 2),
".": (5, 2, 1, 1),
"=": (5, 3, 1, 1)}
On crée ensuite un QGridLayout
qui va nous permettre d'ajouter les widgets selon un agencement en grille :
from PySide6.QtWidgets import QApplication, QWidget, QGridLayout
BUTTONS = {"C": (1, 0, 1, 1),
"/": (1, 3, 1, 1),
"7": (2, 0, 1, 1),
"8": (2, 1, 1, 1),
"9": (2, 2, 1, 1),
"x": (2, 3, 1, 1),
"4": (3, 0, 1, 1),
"5": (3, 1, 1, 1),
"6": (3, 2, 1, 1),
"-": (3, 3, 1, 1),
"1": (4, 0, 1, 1),
"2": (4, 1, 1, 1),
"3": (4, 2, 1, 1),
"+": (4, 3, 1, 1),
"0": (5, 0, 1, 2),
".": (5, 2, 1, 1),
"=": (5, 3, 1, 1)}
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Calculatrice")
self.main_layout = QGridLayout(self)
app = QApplication()
win = Calculator()
win.show()
app.exec()
Il ne faut pas oublier de parenter le layout à la fenêtre en passant self
en argument lors de la création du QGridLayout
.
On crée ensuite le QLineEdit
qui servira à afficher le résultat de l'opération en affichant par défaut le nombre 0. Notes les guillemets autour du 0 : le QLineEdit
n'accepte en effet que des chaînes de caractères.
from PySide6.QtWidgets import QApplication, QWidget, QGridLayout, QLineEdit, QPushButton
BUTTONS = {"C": (1, 0, 1, 1),
"/": (1, 3, 1, 1),
"7": (2, 0, 1, 1),
"8": (2, 1, 1, 1),
"9": (2, 2, 1, 1),
"x": (2, 3, 1, 1),
"4": (3, 0, 1, 1),
"5": (3, 1, 1, 1),
"6": (3, 2, 1, 1),
"-": (3, 3, 1, 1),
"1": (4, 0, 1, 1),
"2": (4, 1, 1, 1),
"3": (4, 2, 1, 1),
"+": (4, 3, 1, 1),
"0": (5, 0, 1, 2),
".": (5, 2, 1, 1),
"=": (5, 3, 1, 1)}
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Calculatrice")
self.main_layout = QGridLayout(self)
self.le_result = QLineEdit("0")
self.main_layout.addWidget(self.le_result, 0, 0, 1, 4)
app = QApplication()
win = Calculator()
win.show()
app.exec()
Pour ajouter le QLineEdit
au layout, on utilise la méthode addWidget
.
Le premier argument correspond au widget que l'on souhaite ajouter au layout. On indique ensuite les coordonnées X et Y (ici 0, 0 car on souhaite placer le QLineEdit en partant en haut à gauche de la fenêtre).
Les 2 derniers arguments correspondent à la taille que doit occuper le widget en hauteur et en largeur. On indique donc 1 en hauteur et 4 en largeur :
self.main_layout.addWidget(self.le_result, 0, 0, 1, 4)
Il ne reste plus qu'à ajouter les boutons. On boucle sur les éléments de notre dictionnaire BUTTONS
pour récupérer le texte et la position ainsi que la taille des boutons :
from PySide6.QtWidgets import QApplication, QWidget, QGridLayout, QLineEdit, QPushButton
BUTTONS = {"C": (1, 0, 1, 1),
"/": (1, 3, 1, 1),
"7": (2, 0, 1, 1),
"8": (2, 1, 1, 1),
"9": (2, 2, 1, 1),
"x": (2, 3, 1, 1),
"4": (3, 0, 1, 1),
"5": (3, 1, 1, 1),
"6": (3, 2, 1, 1),
"-": (3, 3, 1, 1),
"1": (4, 0, 1, 1),
"2": (4, 1, 1, 1),
"3": (4, 2, 1, 1),
"+": (4, 3, 1, 1),
"0": (5, 0, 1, 2),
".": (5, 2, 1, 1),
"=": (5, 3, 1, 1)}
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Calculatrice")
self.buttons = {}
self.main_layout = QGridLayout(self)
self.le_result = QLineEdit("0")
self.main_layout.addWidget(self.le_result, 0, 0, 1, 4)
for button_text, button_position in BUTTONS.items():
button = QPushButton(button_text)
self.main_layout.addWidget(button, *button_position)
self.buttons[button_text] = button
app = QApplication()
win = Calculator()
win.show()
app.exec()
Pour envoyer la position et la taille des boutons à la méthode addWidget
, notez l'utilisation de l'unpacking (avec l'astérisque) :
self.main_layout.addWidget(button, *button_position)
Cela nous permet d'envoyer les 4 informations contenues dans le tuple (la position X,Y et la taille) de façon individuelles. Cela revient au même que de faire :
self.main_layout.addWidget(button, button_position[0], button_position[1], button_position[2], button_position[3])
Pour garder une trace des boutons et pouvoir les modifier par la suite, on passe par un autre dictionnaire, self.buttons
. À chaque création d'un nouveau QPushButton
, on ajoute une clé dans le dictionnaire avec le texte du bouton et le widget associé en valeur :
self.buttons[button_text] = button
Cela nous permettra par la suite d'accéder par exemple au bouton avec le nombre 1 de cette façon :
self.buttons["1"]
Ce n'est pas fini...
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.