Supprimer le dernier caractère
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 compteSupprimer 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.