Supprimer le dernier caractère

Exclusif Premium

Débloquez votre potentiel ! ✨

Cette session fait partie de notre programme Premium exclusif

+100h de formations exclusives
+180 exercices de code avancés
+100h de mentorats en réécriture
20 projets guidés pas à pas
Mentorats groupés hebdomadaires
Support individuel avec nos mentors

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 compte

Supprimer 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.

Rechercher sur le site

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.