diff --git a/calc.py b/calc.py index e15ad9f7f511d856d657f689f4ebbcc90c53c34a..ffff18cc923fdfec663adb198a1482137680db71 100644 --- a/calc.py +++ b/calc.py @@ -37,16 +37,19 @@ class Calc(QMainWindow): self.pushButton_dot, self.pushButton_equal ] - map(lambda btn: btn.clicked.connect(self.click_on_button), btns) + + for btn in btns: + btn.clicked.connect(self.click_on_button) def calculate(self): """ - 如果x、y、operater不为空,计算结果。 + 如果x、y、operater不为空,计算结果,计算出结果后,清空y,保持x和结果相等。 """ if self.x and self.y and self.operator: s = "%s%s%s"%(self.x,self.operator,self.y) print s - self.result = str(eval(s)) + self.x = self.result = str(eval(s)) + self.y = None self.text_result.setText(self.result) def click_on_button(self): @@ -54,43 +57,50 @@ class Calc(QMainWindow): print "点击按钮前:" ,self.x,self.operator,self.y value = self.sender().text() - # 如果点击的是数字,print该数字 + + # 点击数字的处理: + # 1 点数字时,无运算符且有x,累加x + # 2 点数字时,有运算符且有y,累加y + # 3 点数字时,无运算符且无x,赋值给x + # 4 点数字时,有运算符且无Y,赋值给y + if value in "0123456789.": - print "您点击的数字是:",value - try: - if self.operator is None: - # 如果点击的是数字的话,保存到x或追加到x - if self.x is None: - self.x = value - else: - self.x +=value - self.text_result.setText(self.x) + if self.operator is not None: # 有运算符 + if self.y is not None: #有y + self.y =self.y + value + else:#无y + self.y = value + self.text_result.setText(self.y) + + else:#无运算符 + if self.x is not None:#有x + self.x = self.x + value + else: - if self.y is None: - self.y = value - else: - self.y +=value - self.text_result.setText(self.y) - except Exception, e: - print e - - - - #如果点击的是运算符,print该运算符 + self.x = value + self.text_result.setText(self.x) + + + # 开始处理运算符 + # 1.点运算符时记录运算符 + # 2.点运算符时记录运算符并计算结果(x,y,oper都有值) + # 3.点运算符时记录运算符,并将x置为0(x无值) + elif value in "+-*/": - print "print该运算符是:",value self.operator = value - self.text_result.setText("") - - # 如果点击的是=,print = + if self.x is None: + self.x = 0 + if self.x and self.y and self.operator: + self.calculate() - elif value == '=': - print "您点击的是=。" - self.calculate() - self.text_result.setText(self.result) - + # 处理点击等号的操作 + # 1.点等号时计算结果 (x,y,oper都有值) + # 2.点等号时忽略等号 (x,y,oper不都有值) + + elif value == "=": + if self.x and self.y and self.operator: + self.calculate() - # 若果点击的是clear,执行clear()方法 else: print "您点击的是C" self.clear()