class Calculator(QWidget): def __init__(self, parent=None): super(Calculator, self).__init__(parent) self.resultValue = 0 self.memoryValue = 0 self.putInNum = 0 self.initUI() self.operator = '' print('KEY\t\t记忆\t\t输入\t\t显示') self.showState() def showState(self): print('\t\t%s\t\t%s\t\t%s' % (self.memoryValue, self.putInNum, self.resultValue)) def initUI(self): self.lcdScreen = QLCDNumber() self.lcdScreen.setDigitCount(8) self.updateScreen() btn_1 = QPushButton('1') btn_2 = QPushButton('2') btn_3 = QPushButton('3') btn_4 = QPushButton('4') btn_5 = QPushButton('5') btn_6 = QPushButton('6') btn_7 = QPushButton('7') btn_8 = QPushButton('8') btn_9 = QPushButton('9') btn_0 = QPushButton('0') btn_demical = QPushButton('.') btn_convert = QPushButton('±') btn_C = QPushButton('C') btn_back = QPushButton('←') btn_plus = QPushButton('+') btn_minus = QPushButton('-') btn_multi = QPushButton('x') btn_divid = QPushButton('/') btn_equal = QPushButton('=') btn_CE = QPushButton('CE') btn_1.clicked.connect(lambda: self.numBtnPressed(1)) btn_2.clicked.connect(lambda: self.numBtnPressed(2)) btn_3.clicked.connect(lambda: self.numBtnPressed(3)) btn_4.clicked.connect(lambda: self.numBtnPressed(4)) btn_5.clicked.connect(lambda: self.numBtnPressed(5)) btn_6.clicked.connect(lambda: self.numBtnPressed(6)) btn_7.clicked.connect(lambda: self.numBtnPressed(7)) btn_8.clicked.connect(lambda: self.numBtnPressed(8)) btn_9.clicked.connect(lambda: self.numBtnPressed(9)) btn_0.clicked.connect(lambda: self.numBtnPressed(0)) btn_demical.clicked.connect(self.demicalBtnPressed) btn_convert.clicked.connect(self.convertBtnPressed) btn_plus.clicked.connect(lambda: self.operatorBtn(11)) btn_minus.clicked.connect(lambda: self.operatorBtn(12)) btn_multi.clicked.connect(lambda: self.operatorBtn(13)) btn_divid.clicked.connect(lambda: self.operatorBtn(14)) btn_equal.clicked.connect(self.getResult) btn_CE.clicked.connect(self.screenClear) btnGridLayout = QGridLayout() btnGridLayout.addWidget(btn_CE, 0, 0) btnGridLayout.addWidget(btn_C, 0, 1) btnGridLayout.addWidget(btn_back, 0, 2) btnGridLayout.addWidget(btn_divid, 0, 3) btnGridLayout.addWidget(btn_7, 1, 0) btnGridLayout.addWidget(btn_8, 1, 1) btnGridLayout.addWidget(btn_9, 1, 2) btnGridLayout.addWidget(btn_multi, 1, 3) btnGridLayout.addWidget(btn_4, 2, 0) btnGridLayout.addWidget(btn_5, 2, 1) btnGridLayout.addWidget(btn_6, 2, 2) btnGridLayout.addWidget(btn_minus, 2, 3) btnGridLayout.addWidget(btn_1, 3, 0) btnGridLayout.addWidget(btn_2, 3, 1) btnGridLayout.addWidget(btn_3, 3, 2) btnGridLayout.addWidget(btn_plus, 3, 3) btnGridLayout.addWidget(btn_convert, 4, 0) btnGridLayout.addWidget(btn_0, 4, 1) btnGridLayout.addWidget(btn_demical, 4, 2) btnGridLayout.addWidget(btn_equal, 4, 3) mainLayout = QVBoxLayout() mainLayout.addWidget(self.lcdScreen) mainLayout.addLayout(btnGridLayout) self.setLayout(mainLayout) self.setWindowTitle('阿焦的计算器') self.resize(300, 300) def numBtnPressed(self, num): if self.putInNum < 0: putInResulet = self.putInNum * 10 - num else: putInResulet = self.putInNum * 10 + num if self.lcdScreen.checkOverflow(putInResulet) == False: self.putInNum = putInResulet self.resultValue = self.putInNum self.updateScreen() print(num, end='') self.showState() def operatorBtn(self, btn_enum): tuple1 = ('+', '-', 'x', '/') self.memoryValue = self.resultValue self.putInNum = 0 print(tuple1[btn_enum - 11], end='') self.operator = Operator(btn_enum) self.showState() def demicalBtnPressed(self): pass def convertBtnPressed(self): self.putInNum = -self.putInNum self.resultValue = self.putInNum self.updateScreen() print('±', end='') self.showState() def getResult(self): print('=', end='') calculateResult = self.resultValue if self.operator == Operator.plus: calculateResult = self.memoryValue + self.putInNum elif self.operator == Operator.minus: calculateResult = self.memoryValue - self.putInNum elif self.operator == Operator.multi: calculateResult = self.memoryValue * self.putInNum elif self.operator == Operator.divide: if self.putInNum != 0: calculateResult = self.memoryValue / self.putInNum else: self.reportError() if self.lcdScreen.checkOverflow(calculateResult) == False: self.resultValue = calculateResult self.memoryValue = calculateResult self.putInNum = 0 self.updateScreen() self.showState() self.operator = '' def screenClear(self): self.memoryValue = 0 self.putInNum = 0 self.resultValue = 0 self.updateScreen() print('CE', end='') self.showState() def updateScreen(self): self.lcdScreen.display(self.resultValue) def reportError(self): QMessageBox.warning(self, '错误', '除数不能是0!')