- 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 personConnecter les boutons
Il est temps de connecter les boutons des nombres et des opérations.
À l'intérieur de la classe Calculator
, nous allons créer une méthode number_or_operation_pressed
qui sera appelée lors du clique sur un bouton :
def number_or_operation_pressed(self):
if self.le_result.text() == "0":
self.le_result.clear()
self.le_result.setText(self.le_result.text() + self.sender().text())
La structure conditionnelle permet de supprimer le 0 déjà présent dans la boîte de texte.
On utilise ensuite la méthode setText
du QLineEdit
pour récupérer le texte actuel (self.le_result.text()
) et y ajouter le texte envoyé par le bouton cliqué.
Pour ce faire, on utilise la méthode self.sender()
qui permet de récupérer le widget qui a déclenché l'événement. Il s'agit donc dans notre cas du QPushButton
qui a été cliqué. On peut ensuite récupérer le texte du bouton avec la méthode text()
.
Maintenant, nous devons connecter cette méthode aux différents boutons. Nous allons effectuer cette opération juste après la création des boutons dans la méthode __init__
:
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)
# On connecte les boutons
if button_text not in ["=", "C"]:
button.clicked.connect(self.number_or_operation_pressed)
self.buttons[button_text] = button
def number_or_operation_pressed(self):
if self.le_result.text() == "0":
self.le_result.clear()
self.le_result.setText(self.le_result.text() + self.sender().text())
app = QApplication()
win = Calculator()
win.show()
app.exec()
Pour ne pas connecter les boutons C
et =
(qui permettent respectivement de supprimer l'opération et de calculer le résultat), nous utilisons une structure conditionnelle :
if button_text not in ["=", "C"]:
button.clicked.connect(self.number_or_operation_pressed)
On utilise ensuite le signal clicked
et la méthode connect
pour connecter chaque bouton à la méthode créée précédemment.
Il ne nous reste plus qu'à créer une autre méthode qui va nous permettre de ré-initialiser le QLineEdit
:
def clear_result(self):
self.le_result.setText("0")
Et de connecter le bouton C
à cette méthode, en y accédant grâce à notre dictionnaire self.buttons
qui contient tous les boutons de notre interface :
self.buttons["C"].clicked.connect(self.clear_result)
Voici le résultat final du script pour cette partie :
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)
# On connecte les boutons
if button_text not in ["=", "C"]:
button.clicked.connect(self.number_or_operation_pressed)
self.buttons[button_text] = button
# On connecte le bouton pour ré-initialiser le résultat
self.buttons["C"].clicked.connect(self.clear_result)
def number_or_operation_pressed(self):
# Si le QLineEdit contient le nombre 0, on efface tout
if self.le_result.text() == "0":
self.le_result.clear()
# On récupère le texte du QLineEdit et on y ajoute le texte du bouton cliqué
self.le_result.setText(self.le_result.text() + self.sender().text())
def clear_result(self):
# On ré-initialise le texte du QLineEdit
self.le_result.setText("0")
app = QApplication()
win = Calculator()
win.show()
app.exec()
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.