- 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 personCalculer le résultat de l'opération
Pour calculer le résultat de l'opération contenue dans le QLineEdit
, nous allons ajouter une méthode compute_result
à notre classe :
def compute_result(self):
try:
result = eval(self.le_result.text().replace("x", "*"))
except SyntaxError:
return
self.le_result.setText(str(result))
Pour calculer le résultat de l'opération, on utilise la méthode eval
qui permet d'évaluer une chaîne de caractères comme du code Python.
Si le QLineEdit contient une opération non valide, nous aurons une erreur de syntaxe (SyntaxError
), on utilise donc un bloc try / except
pour ne pas faire planter notre programme si jamais l'opération est invalide.
Pour effectuer une multiplication avec Python, on utilise l'astérisque et non la lettre x
, nous devons donc remplacer ce caractère grâce à la méthode replace
:
self.le_result.text().replace("x", "*")
Si l'évaluation de la chaîne de caractères est valide, on affiche le résultat de l'opération dans le QLineEdit
avec la méthode setText
. On converti au préalable le résultat avec la fonction str
car comme nous l'avions vu au début de la formation, nous ne pouvons pas passer un nombre à un QLineEdit
:
self.le_result.setText(str(result))
Il ne nous reste plus qu'à connecter le bouton =
à cette méthode compute_result
:
self.buttons["="].clicked.connect(self.compute_result)
Voici le script au complet :
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)
if button_text not in ["=", "C"]:
button.clicked.connect(self.number_or_operation_pressed)
self.buttons[button_text] = button
self.buttons["C"].clicked.connect(self.clear_result)
# On connecte le bouton pour calculer le résultat
self.buttons["="].clicked.connect(self.compute_result)
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())
def clear_result(self):
self.le_result.setText("0")
def compute_result(self):
try:
# Évaluation de l'opération contenue dans le QLineEdit
result = eval(self.le_result.text().replace("x", "*"))
except SyntaxError:
return
self.le_result.setText(str(result))
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.