- 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 personSupprimer le dernier caractère
Dans cette partie on va voir comment on peut, en appuyant sur la touche "retour arrière" (backspace en anglais), supprimer le dernier caractères que l'on a ajouté dans la boîte de texte.
Pour ce faire nous allons rajouter un raccourci clavier dans la méthode connect_keyboard_shortcuts
pour connecter la touche backspace à une nouvelle méthode que nous allons appeler remove_last_character
.
Pour nous assurer que la boîte de texte contient au moins un caractère, on va utiliser une structure conditionnelle et la fonction len
pour vérifier la longueur du texte contenu dans le QLineEdit
:
def remove_last_character(self):
if len(self.le_result.text()) > 1:
self.le_result.setText(self.le_result.text()[:-1])
Avec len(self.le_result.text()) > 1
, on vérifie que le QLineEdit
contient plus d'1 caractère, si c'est le cas, on modifie le texte avec la méthode setText
et on récupère tous les caractères du QLineEdit
sauf le dernier grâce au slicing ([:-1]
) :
self.le_result.setText(self.le_result.text()[:-1])
Si le QLineEdit
contient 1 caractère ou moins, on ré-initialise le texte avec le nombre 0.
Voici donc à quoi ressemble le code final de la fonction :
def remove_last_character(self):
if len(self.le_result.text()) > 1:
self.le_result.setText(self.le_result.text()[:-1])
else:
self.le_result.setText("0")
Il ne reste plus qu'à rajouter le raccourci clavier correspondant dans la méthode connect_keyboard_shortcuts
:
QShortcut(QKeySequence(QtCore.Qt.Key_Backspace), self, self.remove_last_character)
À noter qu'on utilise là encore la constante définie dans le module QtCore.Qt
pour la touche "retour arrière" (QtCore.Qt.Key_Backspace
).
Voici le script final pour cette partie :
from PySide6 import QtCore
from PySide6.QtGui import QShortcut, QKeySequence
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.le_result.setEnabled(False)
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)
self.buttons["="].clicked.connect(self.compute_result)
self.connect_keyboard_shortcuts()
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:
result = eval(self.le_result.text().replace("x", "*"))
except SyntaxError:
return
self.le_result.setText(str(result))
def remove_last_character(self):
# Si le QLineEdit contient plus d'un caractère, on récupère tous les caractères sauf le dernier
if len(self.le_result.text()) > 1:
self.le_result.setText(self.le_result.text()[:-1])
else:
self.le_result.setText("0")
def connect_keyboard_shortcuts(self):
for button_text, button in self.buttons.items():
QShortcut(QKeySequence(button_text), self, button.clicked.emit)
QShortcut(QKeySequence(QtCore.Qt.Key_Return), self, self.compute_result)
# On connecte la touche retour arrière
QShortcut(QKeySequence(QtCore.Qt.Key_Backspace), self, self.remove_last_character)
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.