Search code examples
pythonpython-3.xpyqt5calculatorqlcdnumber

How can I display multiple numbers on QLCDNumber Screen?


I am trying simple calculator with Qt Designer but I couldn't display numbers on QLCDNumber as multiple. For example when I clicked once pushButton_1, displays (1) on screen,no problem but I clicked second time doesn't display (11).When I use LineEdit instead of QLCDNumber I can use "insert" method (like self.lineEdit.insert(value)) and can display numbers multiple.Can we use similar method in QLCDNumber?

Can we use similar methods in QLCDNumber?

Example Code:

    self.pushButton_0.clicked.connect(lambda: self.display_screen("0"))
    self.pushButton_1.clicked.connect(lambda: self.display_screen("1"))
    self.pushButton_2.clicked.connect(lambda: self.display_screen("2"))
    self.pushButton_3.clicked.connect(lambda: self.display_screen("3"))
    self.pushButton_4.clicked.connect(lambda: self.display_screen("4"))
    self.pushButton_5.clicked.connect(lambda: self.display_screen("5"))
    self.pushButton_6.clicked.connect(lambda: self.display_screen("6"))
    self.pushButton_7.clicked.connect(lambda: self.display_screen("7"))
    self.pushButton_8.clicked.connect(lambda: self.display_screen("8"))
    self.pushButton_9.clicked.connect(lambda: self.display_screen("9"))
    self.pushButton_dot.clicked.connect(lambda: self.display_screen("."))
    self.pushButton_00.clicked.connect(lambda: self.display_screen("00"))
    self.pushButton_add.clicked.connect(lambda: self.display_screen("+"))
    self.pushButton_minus.clicked.connect(lambda: self.display_screen("-"))
    self.pushButton_multiply.clicked.connect(lambda: self.display_screen("*"))
    self.pushButton_divide.clicked.connect(lambda: self.display_screen("/"))
    #self.pushButton_equal.clicked.connect(lambda: self.display_screen("="))
    self.pushButton_equal.clicked.connect(lambda:self.calculation)

    self.pushButton_sil.clicked.connect(self.lineEdit.backspace)
    self.pushButton_clear.clicked.connect(self.lineEdit.clear)

def display_screen(self,value):
    self.lineEdit.insert(value)

Solution

  • A possible solution is to create a variable that builds the string by implementing the operations you want:

    from PyQt5 import QtWidgets
    
    
    class Widget(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.text = ""
    
            self.lcd_number = QtWidgets.QLCDNumber()
    
            button_1 = QtWidgets.QPushButton("1", clicked=lambda: self._handle_clicked("1"))
            button_2 = QtWidgets.QPushButton("2", clicked=lambda: self._handle_clicked("2"))
            button_3 = QtWidgets.QPushButton("3", clicked=lambda: self._handle_clicked("3"))
            button_4 = QtWidgets.QPushButton("4", clicked=lambda: self._handle_clicked("4"))
    
            lay = QtWidgets.QGridLayout(self)
            lay.addWidget(button_1, 0, 0)
            lay.addWidget(button_2, 0, 1)
            lay.addWidget(button_3, 0, 2)
            lay.addWidget(button_4, 0, 3)
            lay.addWidget(self.lcd_number)
    
        def _handle_clicked(self, s):
            self.text += s
            self.lcd_number.display(self.text)
    
    
    if __name__ == "__main__":
    
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())