Advertisement
barbos01

Untitled

Jan 17th, 2023
761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.48 KB | None | 0 0
  1. import sys
  2. from PyQt5.QtCore import pyqtSlot
  3. from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLabel, QDialog, QMessageBox
  4. from PyQt5 import QtCore
  5. from math import *
  6.  
  7.  
  8. class App(QMainWindow):
  9.  
  10.     def __init__(self):
  11.         super().__init__()
  12.  
  13.         self.button0 = QPushButton('0', self)
  14.         self.button1 = QPushButton('1', self)
  15.         self.button2 = QPushButton('2', self)
  16.         self.button3 = QPushButton('3', self)
  17.         self.button4 = QPushButton('4', self)
  18.         self.button5 = QPushButton('5', self)
  19.         self.button6 = QPushButton('6', self)
  20.         self.button7 = QPushButton('7', self)
  21.         self.button8 = QPushButton('8', self)
  22.         self.button9 = QPushButton('9', self)
  23.         self.buttonPlus = QPushButton('+', self)
  24.         self.buttonMinus = QPushButton('-', self)
  25.         self.buttonEgal = QPushButton('=', self)
  26.         self.buttonClearAll = QPushButton('CE', self)
  27.         self.buttonClearOne = QPushButton('C', self)
  28.         self.buttonMultiply = QPushButton('X', self)
  29.         self.buttonDivision = QPushButton('/', self)
  30.         self.buttonDot = QPushButton('.', self)
  31.  
  32.         self.resultLabel = QLabel(self)
  33.         self.title = 'Calculator'
  34.         self.left = 500
  35.         self.top = 250
  36.         self.width = 225
  37.         self.height = 200
  38.         self.labelText = ""
  39.         self.initUI()
  40.  
  41.     def initUI(self):
  42.         self.setWindowTitle(self.title)
  43.         self.setGeometry(self.left, self.top, self.width, self.height)
  44.  
  45.         self.resultLabel.move(10, 10)
  46.         self.resultLabel.resize(180, 20)
  47.         self.resultLabel.setStyleSheet("background-color: lightgrey")
  48.         self.resultLabel.setAlignment(QtCore.Qt.AlignCenter)
  49.         self.resultLabel.setText(self.labelText)
  50.  
  51.         # Create a button in the window
  52.         self.button0.move(10, 50)
  53.         self.button0.resize(30, 30)
  54.         self.button0.clicked.connect(lambda: self.setNumber(0))
  55.  
  56.         self.button1.move(40, 50)
  57.         self.button1.resize(30, 30)
  58.         self.button1.clicked.connect(lambda: self.setNumber(1))
  59.  
  60.         self.button2.move(70, 50)
  61.         self.button2.resize(30, 30)
  62.         self.button2.clicked.connect(lambda: self.setNumber(2))
  63.  
  64.         self.button3.move(10, 80)
  65.         self.button3.resize(30, 30)
  66.         self.button3.clicked.connect(lambda: self.setNumber(3))
  67.  
  68.         # Create a button in the window
  69.         self.button4.move(40, 80)
  70.         self.button4.resize(30, 30)
  71.         self.button4.clicked.connect(lambda: self.setNumber(4))
  72.  
  73.         self.button5.move(70, 80)
  74.         self.button5.resize(30, 30)
  75.         self.button5.clicked.connect(lambda: self.setNumber(5))
  76.  
  77.         self.button6.move(10, 110)
  78.         self.button6.resize(30, 30)
  79.         self.button6.clicked.connect(lambda: self.setNumber(6))
  80.  
  81.         self.button7.move(40, 110)
  82.         self.button7.resize(30, 30)
  83.         self.button7.clicked.connect(lambda: self.setNumber(7))
  84.  
  85.         self.button8.move(70, 110)
  86.         self.button8.resize(30, 30)
  87.         self.button8.clicked.connect(lambda: self.setNumber(8))
  88.  
  89.         self.button9.move(40, 140)
  90.         self.button9.resize(30, 30)
  91.         self.button9.clicked.connect(lambda: self.setNumber(9))
  92.  
  93.         self.buttonPlus.move(130, 50)
  94.         self.buttonPlus.resize(30, 30)
  95.         self.buttonPlus.clicked.connect(lambda: self.setOperator("+"))
  96.  
  97.         self.buttonMinus.move(160, 50)
  98.         self.buttonMinus.resize(30, 30)
  99.         self.buttonMinus.clicked.connect(lambda: self.setOperator("-"))
  100.  
  101.         self.buttonEgal.move(70, 140)
  102.         self.buttonEgal.resize(30, 30)
  103.         self.buttonEgal.clicked.connect(lambda: self.resultOperation())
  104.         self.show()
  105.  
  106.         self.buttonMultiply.move(130, 80)
  107.         self.buttonMultiply.resize(30, 30)
  108.         self.buttonMultiply.clicked.connect(lambda: self.setOperator("*"))
  109.         self.show()
  110.  
  111.         self.buttonDivision.move(160, 80)
  112.         self.buttonDivision.resize(30, 30)
  113.         self.buttonDivision.clicked.connect(lambda: self.setOperator("/"))
  114.         self.show()
  115.  
  116.         self.buttonClearAll.move(160, 110)
  117.         self.buttonClearAll.resize(30, 30)
  118.         self.buttonClearAll.clicked.connect(lambda: self.clearField())
  119.         self.show()
  120.  
  121.         self.buttonClearOne.move(130, 110)
  122.         self.buttonClearOne.resize(30, 30)
  123.         self.buttonClearOne.clicked.connect(lambda: self.clearOne())
  124.         self.show()
  125.  
  126.         self.buttonDot.move(10, 140)
  127.         self.buttonDot.resize(30, 30)
  128.         self.buttonDot.clicked.connect(lambda: self.setDot())
  129.         self.show()
  130.  
  131.     @pyqtSlot()
  132.     def setNumber(self, nr):
  133.         self.labelText += str(nr)
  134.         self.resultLabel.setText(self.labelText)
  135.         QApplication.processEvents()
  136.  
  137.     def setOperator(self, operator):
  138.         if not self.labelText == "" and not self.labelText[-1] in "*/%+-=. ":
  139.             self.labelText += operator
  140.             self.resultLabel.setText(self.labelText)
  141.             QApplication.processEvents()
  142.  
  143.     def resultOperation(self):
  144.         print(self.labelText[-1])
  145.         if self.labelText == "":
  146.             return
  147.         if self.labelText[-1] == "+" or self.labelText[-1] == "/" or self.labelText[-1] == "*" or self.labelText[
  148.             -1] == '-' or self.labelText[-1] == "+-" \
  149.                 or self.labelText[-1] == "-+" or self.labelText[-1] == "Invalid operation":
  150.             self.labelText = ""
  151.             self.resultLabel.setText(self.labelText)
  152.             QMessageBox.about(self, "Error", "Invalid operation")
  153.             return
  154.         result = str(eval(self.labelText))
  155.         self.labelText = result
  156.         self.resultLabel.setText(result)
  157.         QApplication.processEvents()
  158.         print(result)
  159.  
  160.     def clearField(self):
  161.         self.labelText = ""
  162.         self.resultLabel.setText(self.labelText)
  163.         QApplication.processEvents()
  164.  
  165.     def clearOne(self):
  166.         self.labelText = self.labelText[:-1]
  167.         self.resultLabel.setText(self.labelText)
  168.         QApplication.processEvents()
  169.  
  170.     def setDot(self):
  171.         if self.labelText == "" or self.labelText[-1] in "%+-=. ":
  172.             self.labelText = ""
  173.             self.resultLabel.setText(self.labelText)
  174.             QMessageBox.about(self, "Error", "Invalid operation")
  175.             return
  176.         self.opResult += '.'
  177.         self.resultLabel.setText(self.labelText)
  178.         QApplication.processEvents()
  179.  
  180.  
  181. if __name__ == '__main__':
  182.     app = QApplication(sys.argv)
  183.     ex = App()
  184.     sys.exit(app.exec_())
  185.  
  186.  
  187.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement