Ajouter une propriété pour le QLineEdit

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

Ajouter une propriété pour le QLineEdit

Vous l'avez peut-être remarqué mais nous utilisons très souvent la méthode text du QLineEdit pour récupérer le texte contenu dans la boîte de texte de l'opération.

Comme c'est un peu long à écrire à chaque fois et pas forcément très explicite, on peut créer dans notre classe une propriété qui nous permettra d'accéder au texte contenu dans le QLineEdit avec l'attribut result :

@property
def result(self):
    return self.le_result.text()

On peut ainsi remplacer dans le reste du script la ligne self.le_result.text() par self.result :

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()


    @property
    def result(self):
        return self.le_result.text()

    def number_or_operation_pressed(self):
        if self.result == "0":
            self.le_result.clear()

        self.le_result.setText(self.result + self.sender().text())

    def clear_result(self):
        self.le_result.setText("0")

    def compute_result(self):
        try:
            result = eval(self.result.replace("x", "*"))
        except SyntaxError:
            return
        self.le_result.setText(str(result))

    def remove_last_character(self):
        if len(self.result) > 1:
            self.le_result.setText(self.result[:-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)
        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.