# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(367, 611)
Form.setStyleSheet("background-color: rgb(0,0,0);")
self.pushButton_1 = QtWidgets.QPushButton(Form)
self.pushButton_1.setGeometry(QtCore.QRect(10, 430, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_1.setFont(font)
self.pushButton_1.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_1.setObjectName("pushButton_1")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(100, 430, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_2.setFont(font)
self.pushButton_2.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(190, 430, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_3.setFont(font)
self.pushButton_3.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(Form)
self.pushButton_4.setGeometry(QtCore.QRect(10, 340, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_4.setFont(font)
self.pushButton_4.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(Form)
self.pushButton_5.setGeometry(QtCore.QRect(100, 340, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_5.setFont(font)
self.pushButton_5.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_5.setObjectName("pushButton_5")
self.pushButton_6 = QtWidgets.QPushButton(Form)
self.pushButton_6.setGeometry(QtCore.QRect(190, 340, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_6.setFont(font)
self.pushButton_6.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_6.setObjectName("pushButton_6")
self.pushButton_7 = QtWidgets.QPushButton(Form)
self.pushButton_7.setGeometry(QtCore.QRect(10, 250, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_7.setFont(font)
self.pushButton_7.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_7.setObjectName("pushButton_7")
self.pushButton_8 = QtWidgets.QPushButton(Form)
self.pushButton_8.setGeometry(QtCore.QRect(100, 250, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_8.setFont(font)
self.pushButton_8.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_8.setObjectName("pushButton_8")
self.pushButton_9 = QtWidgets.QPushButton(Form)
self.pushButton_9.setGeometry(QtCore.QRect(190, 250, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_9.setFont(font)
self.pushButton_9.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_9.setObjectName("pushButton_9")
self.pushButton_0 = QtWidgets.QPushButton(Form)
self.pushButton_0.setGeometry(QtCore.QRect(10, 520, 165, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_0.setFont(font)
self.pushButton_0.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
" text-align: left;\n"
" padding-left: 30px;\n"
" \n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_0.setObjectName("pushButton_0")
self.pushButton_dot = QtWidgets.QPushButton(Form)
self.pushButton_dot.setGeometry(QtCore.QRect(190, 520, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_dot.setFont(font)
self.pushButton_dot.setStyleSheet("QPushButton {\n"
" background-color: rgb(51,51,51);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"QPushButton:pressed {\n"
" background-color: rgb(115,115,114);\n"
"}\n"
"")
self.pushButton_dot.setObjectName("pushButton_dot")
self.pushButton_AC = QtWidgets.QPushButton(Form)
self.pushButton_AC.setGeometry(QtCore.QRect(10, 160, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_AC.setFont(font)
self.pushButton_AC.setStyleSheet("QPushButton {\n"
" background-color: rgb(165,165,165);\n"
" color: black; \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(217,216,217);\n"
"};\n"
"")
self.pushButton_AC.setObjectName("pushButton_AC")
self.pushButton_shift = QtWidgets.QPushButton(Form)
self.pushButton_shift.setGeometry(QtCore.QRect(100, 160, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_shift.setFont(font)
self.pushButton_shift.setStyleSheet("QPushButton {\n"
" background-color: rgb(165,165,165);\n"
" color: black; \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(217,216,217);\n"
"};\n"
"")
self.pushButton_shift.setObjectName("pushButton_shift")
self.pushButton_percent = QtWidgets.QPushButton(Form)
self.pushButton_percent.setGeometry(QtCore.QRect(190, 160, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_percent.setFont(font)
self.pushButton_percent.setStyleSheet("QPushButton {\n"
" background-color: rgb(165,165,165);\n"
" color: black; \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(217,216,217);\n"
"};\n"
"")
self.pushButton_percent.setObjectName("pushButton_percent")
self.pushButton_division = QtWidgets.QPushButton(Form)
self.pushButton_division.setGeometry(QtCore.QRect(280, 160, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_division.setFont(font)
self.pushButton_division.setStyleSheet("QPushButton {\n"
" background-color: rgb(250,167,56);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(247,203,147);\n"
"};\n"
"\n"
"\n"
"")
self.pushButton_division.setObjectName("pushButton_division")
self.pushButton_multiplication = QtWidgets.QPushButton(Form)
self.pushButton_multiplication.setGeometry(QtCore.QRect(280, 250, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_multiplication.setFont(font)
self.pushButton_multiplication.setStyleSheet("QPushButton {\n"
" background-color: rgb(250,167,56);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(247,203,147);\n"
"};\n"
"\n"
"\n"
"")
self.pushButton_multiplication.setObjectName("pushButton_multiplication")
self.pushButton_addition = QtWidgets.QPushButton(Form)
self.pushButton_addition.setGeometry(QtCore.QRect(280, 430, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_addition.setFont(font)
self.pushButton_addition.setStyleSheet("QPushButton {\n"
" background-color: rgb(250,167,56);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(247,203,147);\n"
"};\n"
"\n"
"\n"
"")
self.pushButton_addition.setObjectName("pushButton_addition")
self.pushButton_equal = QtWidgets.QPushButton(Form)
self.pushButton_equal.setGeometry(QtCore.QRect(280, 520, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_equal.setFont(font)
self.pushButton_equal.setStyleSheet("QPushButton {\n"
" background-color: rgb(250,167,56);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(247,203,147);\n"
"};\n"
"\n"
"\n"
"")
self.pushButton_equal.setObjectName("pushButton_equal")
self.pushButton_subtraction = QtWidgets.QPushButton(Form)
self.pushButton_subtraction.setGeometry(QtCore.QRect(280, 340, 75, 75))
font = QtGui.QFont()
font.setFamily("PingFang SC")
font.setPointSize(27)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.pushButton_subtraction.setFont(font)
self.pushButton_subtraction.setStyleSheet("QPushButton {\n"
" background-color: rgb(250,167,56);\n"
" color: rgb(255,255,255); \n"
" border-radius: 37px;\n"
" border-style: outset;\n"
" font: 27pt \"PingFang SC\";\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
" background-color: rgb(247,203,147);\n"
"};\n"
"\n"
"\n"
"")
self.pushButton_subtraction.setObjectName("pushButton_subtraction")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(10, 50, 341, 100))
self.lineEdit.setFocusPolicy(QtCore.Qt.NoFocus)
self.lineEdit.setStyleSheet("background-color: black;\n"
"font: 180 80pt \"PingFang SC\";\n"
"color: white; \n"
"border-style: outset;")
self.lineEdit.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.lineEdit.setObjectName("lineEdit")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Calculator"))
self.pushButton_1.setText(_translate("Form", "1"))
self.pushButton_2.setText(_translate("Form", "2"))
self.pushButton_3.setText(_translate("Form", "3"))
self.pushButton_4.setText(_translate("Form", "4"))
self.pushButton_5.setText(_translate("Form", "5"))
self.pushButton_6.setText(_translate("Form", "6"))
self.pushButton_7.setText(_translate("Form", "7"))
self.pushButton_8.setText(_translate("Form", "8"))
self.pushButton_9.setText(_translate("Form", "9"))
self.pushButton_0.setText(_translate("Form", "0"))
self.pushButton_dot.setText(_translate("Form", "."))
self.pushButton_AC.setText(_translate("Form", "AC"))
self.pushButton_shift.setText(_translate("Form", "+/-"))
self.pushButton_percent.setText(_translate("Form", "%"))
self.pushButton_division.setText(_translate("Form", "/"))
self.pushButton_multiplication.setText(_translate("Form", "*"))
self.pushButton_addition.setText(_translate("Form", "+"))
self.pushButton_equal.setText(_translate("Form", "="))
self.pushButton_subtraction.setText(_translate("Form", "-"))
self.lineEdit.setText(_translate("Form", "0"))
class CALC(object):
def __init__(self):
self.previous_number = ""
self.current_number = ""
self.operator = ""
self.display_number = ""
self.last_chr = ""
self.error_status = False
def display(self):
if self.display_number == "":
return "0"
elif self.error_status:
return "Error"
else:
return str(round(float(self.display_number), 5))
def operation(self, in_chr):
try:
if not self.error_status:
if self.last_chr == "=" and in_chr in [str(c) for c in range(10)]: # 如果最后一个字符是等号,且当前字符是数字 -> AC
self.previous_number = self.current_number = self.operator = self.display_number = ""
if self.last_chr in ["+", "-", "*", "/"] and in_chr in ["+", "-", "*", "/"]: # 如果最后一个字符是运算符,且当前字符是运算符 -> 重复运算
self.operator = in_chr
else:
if in_chr.isdigit():
self.current_number += in_chr
self.display_number = self.current_number
elif in_chr in ["+", "-", "*", "/"]:
if self.previous_number == "":
self.previous_number = self.current_number
else:
self.previous_number = str(eval(self.previous_number + self.operator + self.current_number))
self.current_number = ""
self.operator = in_chr
self.display_number = self.previous_number
elif in_chr in ["AC", "+/-", "%", "."]:
if in_chr == "AC":
self.previous_number = self.current_number = self.operator = self.display_number = ""
elif in_chr == "+/-":
self.display_number = str(-float(self.display_number))
self.current_number = self.display_number
self.previous_number = ""
elif in_chr == "%":
self.display_number = str(float(self.display_number) / 100)
self.current_number = self.display_number
self.previous_number = ""
elif in_chr == ".":
if "." not in self.display_number:
self.display_number += "."
self.current_number = self.display_number
elif in_chr == "=":
if self.operator == "":
self.display_number = self.current_number
else:
self.display_number = str(eval(self.previous_number + self.operator + self.current_number))
else:
if in_chr == "AC":
self.error_status = False
self.previous_number = self.current_number = self.operator = self.display_number = ""
self.last_chr = in_chr
except:
self.error_status = True
self.display_number = "Error"
class Windows(QtWidgets.QDialog, Ui_Form):
def __init__(self, parent=None):
super(Windows, self).__init__(parent)
self.setupUi(self)
self.mouse_pad()
self.calc = CALC()
def operator(self, in_chr):
self.calc.operation(in_chr)
self.lineEdit.setText(self.calc.display())
def keyPressEvent(self, event):
event_key_input = event.key()
if ord("0") <= event_key_input <= ord("9"):
self.operator(chr(event_key_input))
elif event_key_input in (ord('+'), ord('-'), ord('*'), ord('/')):
self.operator(chr(event_key_input))
elif event_key_input in (ord('='), 16777220):
self.operator("=")
elif event_key_input == ord('.'):
self.operator(".")
elif event_key_input == ord('%'):
self.operator("%")
elif event_key_input == ord('C'):
self.operator("AC")
else:
pass
def mouse_pad(self):
self.pushButton_0.clicked.connect(lambda: self.operator(str(0)))
self.pushButton_1.clicked.connect(lambda: self.operator(str(1)))
self.pushButton_2.clicked.connect(lambda: self.operator(str(2)))
self.pushButton_3.clicked.connect(lambda: self.operator(str(3)))
self.pushButton_4.clicked.connect(lambda: self.operator(str(4)))
self.pushButton_5.clicked.connect(lambda: self.operator(str(5)))
self.pushButton_6.clicked.connect(lambda: self.operator(str(6)))
self.pushButton_7.clicked.connect(lambda: self.operator(str(7)))
self.pushButton_8.clicked.connect(lambda: self.operator(str(8)))
self.pushButton_9.clicked.connect(lambda: self.operator(str(9)))
self.pushButton_addition.clicked.connect(lambda: self.operator("+"))
self.pushButton_subtraction.clicked.connect(lambda: self.operator("-"))
self.pushButton_multiplication.clicked.connect(lambda: self.operator("*"))
self.pushButton_division.clicked.connect(lambda: self.operator("/"))
self.pushButton_equal.clicked.connect(lambda: self.operator("="))
self.pushButton_AC.clicked.connect(lambda: self.operator("AC"))
self.pushButton_dot.clicked.connect(lambda: self.operator("."))
self.pushButton_percent.clicked.connect(lambda: self.operator("%"))
self.pushButton_shift.clicked.connect(lambda: self.operator("+/-"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())