Connecter les boutons
Débloquez votre potentiel ! ✨
Cette session fait partie de notre programme Premium exclusif
Prêt à passer au niveau supérieur ?
Découvrez tous les avantages Premium et transformez votre apprentissage dès aujourd'hui!
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compteConnecter 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.