Python简单计算器 - Go语言中文社区

Python简单计算器


这里写图片描述

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Calculator.ui'
#
# Created: Fri Apr 22 12:33:04 2016
#      by: PyQt4 UI code generator 4.9.6
#
# WARNING! All changes made in this file will be lost!
ui_Calculator.py
from PyQt4 import QtCore, QtGui
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s
try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)
class Ui_Calculator(object):
    def setupUi(self, Calculator):
        Calculator.setObjectName(_fromUtf8("Calculator"))
        Calculator.resize(201, 250)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8("ICON.ico")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Calculator.setWindowIcon(icon)
        Calculator.setToolTip(_fromUtf8(""))
        Calculator.setWindowFilePath(_fromUtf8(""))
        self.widgetKeys = QtGui.QWidget(Calculator)
        self.widgetKeys.setGeometry(QtCore.QRect(0, 50, 201, 201))
        self.widgetKeys.setObjectName(_fromUtf8("widgetKeys"))
        self.pushButtonCE = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonCE.setGeometry(QtCore.QRect(0, 0, 51, 41))
        self.pushButtonCE.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonCE.setObjectName(_fromUtf8("pushButtonCE"))
        self.pushButtonC = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonC.setGeometry(QtCore.QRect(50, 0, 51, 41))
        self.pushButtonC.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonC.setObjectName(_fromUtf8("pushButtonC"))
        self.pushButtonBac = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonBac.setGeometry(QtCore.QRect(100, 0, 51, 41))
        self.pushButtonBac.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonBac.setObjectName(_fromUtf8("pushButtonBac"))
        self.pushButtonDiv = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonDiv.setGeometry(QtCore.QRect(150, 0, 51, 41))
        self.pushButtonDiv.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonDiv.setObjectName(_fromUtf8("pushButtonDiv"))
        self.pushButtonNum7 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum7.setGeometry(QtCore.QRect(0, 40, 51, 41))
        self.pushButtonNum7.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum7.setObjectName(_fromUtf8("pushButtonNum7"))
        self.pushButtonNum8 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum8.setGeometry(QtCore.QRect(50, 40, 51, 41))
        self.pushButtonNum8.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum8.setObjectName(_fromUtf8("pushButtonNum8"))
        self.pushButtonNum9 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum9.setGeometry(QtCore.QRect(100, 40, 51, 41))
        self.pushButtonNum9.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum9.setObjectName(_fromUtf8("pushButtonNum9"))
        self.pushButtonMul = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonMul.setGeometry(QtCore.QRect(150, 40, 51, 41))
        self.pushButtonMul.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonMul.setObjectName(_fromUtf8("pushButtonMul"))
        self.pushButtonNum4 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum4.setGeometry(QtCore.QRect(0, 80, 51, 41))
        self.pushButtonNum4.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum4.setObjectName(_fromUtf8("pushButtonNum4"))
        self.pushButtonNum5 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum5.setGeometry(QtCore.QRect(50, 80, 51, 41))
        self.pushButtonNum5.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum5.setObjectName(_fromUtf8("pushButtonNum5"))
        self.pushButtonNum6 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum6.setGeometry(QtCore.QRect(100, 80, 51, 41))
        self.pushButtonNum6.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum6.setObjectName(_fromUtf8("pushButtonNum6"))
        self.pushButtonSub = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonSub.setGeometry(QtCore.QRect(150, 80, 51, 41))
        self.pushButtonSub.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonSub.setObjectName(_fromUtf8("pushButtonSub"))
        self.pushButtonNum1 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum1.setGeometry(QtCore.QRect(0, 120, 51, 41))
        self.pushButtonNum1.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum1.setObjectName(_fromUtf8("pushButtonNum1"))
        self.pushButtonNum2 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum2.setGeometry(QtCore.QRect(50, 120, 51, 41))
        self.pushButtonNum2.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum2.setObjectName(_fromUtf8("pushButtonNum2"))
        self.pushButtonNum3 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum3.setGeometry(QtCore.QRect(100, 120, 51, 41))
        self.pushButtonNum3.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum3.setObjectName(_fromUtf8("pushButtonNum3"))
        self.pushButtonAdd = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonAdd.setGeometry(QtCore.QRect(150, 120, 51, 41))
        self.pushButtonAdd.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonAdd.setObjectName(_fromUtf8("pushButtonAdd"))
        self.pushButtonDot = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonDot.setGeometry(QtCore.QRect(0, 160, 51, 41))
        self.pushButtonDot.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonDot.setObjectName(_fromUtf8("pushButtonDot"))
        self.pushButtonNum0 = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonNum0.setGeometry(QtCore.QRect(50, 160, 51, 41))
        self.pushButtonNum0.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonNum0.setObjectName(_fromUtf8("pushButtonNum0"))
        self.pushButtonEqu = QtGui.QPushButton(self.widgetKeys)
        self.pushButtonEqu.setGeometry(QtCore.QRect(100, 160, 101, 41))
        self.pushButtonEqu.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pushButtonEqu.setObjectName(_fromUtf8("pushButtonEqu"))
        self.textEditResult = QtGui.QTextEdit(Calculator)
        self.textEditResult.setGeometry(QtCore.QRect(0, 0, 201, 51))
        self.textEditResult.setReadOnly(True)
        self.textEditResult.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
        self.textEditResult.setObjectName(_fromUtf8("textEditResult"))
        self.retranslateUi(Calculator)
        QtCore.QMetaObject.connectSlotsByName(Calculator)
     def retranslateUi(self, Calculator):
        Calculator.setWindowTitle(_translate("Calculator", "计算器", None))
        self.pushButtonCE.setText(_translate("Calculator", "CE", None))
        self.pushButtonC.setText(_translate("Calculator", "C", None))
        self.pushButtonBac.setText(_translate("Calculator", "<-", None))
        self.pushButtonDiv.setText(_translate("Calculator", "/", None))
        self.pushButtonNum7.setText(_translate("Calculator", "7", None))
        self.pushButtonNum8.setText(_translate("Calculator", "8", None))
        self.pushButtonNum9.setText(_translate("Calculator", "9", None))
        self.pushButtonMul.setText(_translate("Calculator", "*", None))
        self.pushButtonNum4.setText(_translate("Calculator", "4", None))
        self.pushButtonNum5.setText(_translate("Calculator", "5", None))
        self.pushButtonNum6.setText(_translate("Calculator", "6", None))
        self.pushButtonSub.setText(_translate("Calculator", "-", None))
        self.pushButtonNum1.setText(_translate("Calculator", "1", None))
        self.pushButtonNum2.setText(_translate("Calculator", "2", None))
        self.pushButtonNum3.setText(_translate("Calculator", "3", None))
        self.pushButtonAdd.setText(_translate("Calculator", "+", None))
        self.pushButtonDot.setText(_translate("Calculator", ".", None))
        self.pushButtonNum0.setText(_translate("Calculator", "0", None))
        self.pushButtonEqu.setText(_translate("Calculator", "=", None))

Calculator.py

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 21 11:11:58 2016

>@author: Administrator
"""
import sys
from PyQt4 import  QtGui
from PyQt4 import  QtCore
from ui_Calculator import Ui_Calculator
sys.argv.append('Calculator')

>try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

>#继承的类要和生成的ui对相
class Calculator(QtGui.QDialog):
    valueOne = '0' #运算符号前数值变量
    operator = ' ' #运算符号变量
    valueTwo = ''  #运算符号后数值变量
    valueOut = ''  #结果数值变量
    history = ''   #历史纪录变量
    def __init__(self, parent=None):
        super(Calculator, self).__init__(parent)
        self.ui = Ui_Calculator() #实例化图形界面类
        #设置窗口图标,下面两句实现任务栏图标与窗口图标一致
        import ctypes
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("Calculator")   
        self.ui.setupUi(self)
        #设置显示框初始值0
        self.ui.textEditResult.setText(self.valueOne)        
        #固定窗口大小不变
        self.setFixedSize(201, 250)
        self.ui.pushButtonAdd.setShortcut('+')
        self.ui.pushButtonCE .clicked.connect(self.ActionPushCE )
        self.ui.pushButtonC  .clicked.connect(self.ActionPushC  )
        self.ui.pushButtonBac.clicked.connect(self.ActionPushBac)
        self.ui.pushButtonAdd.clicked.connect(self.ActionPushAdd)
        self.ui.pushButtonDiv.clicked.connect(self.ActionPushDiv)
        self.ui.pushButtonDot.clicked.connect(self.ActionPushDot)
        self.ui.pushButtonEqu.clicked.connect(self.ActionPushEqu)
        self.ui.pushButtonMul.clicked.connect(self.ActionPushMul)
        self.ui.pushButtonSub.clicked.connect(self.ActionPushSub)
        self.ui.pushButtonNum0.clicked.connect(self.ActionPushNum0)
        self.ui.pushButtonNum1.clicked.connect(self.ActionPushNum1)
        self.ui.pushButtonNum2.clicked.connect(self.ActionPushNum2)
        self.ui.pushButtonNum3.clicked.connect(self.ActionPushNum3)
        self.ui.pushButtonNum4.clicked.connect(self.ActionPushNum4)
        self.ui.pushButtonNum5.clicked.connect(self.ActionPushNum5)
        self.ui.pushButtonNum6.clicked.connect(self.ActionPushNum6)
        self.ui.pushButtonNum7.clicked.connect(self.ActionPushNum7)
        self.ui.pushButtonNum8.clicked.connect(self.ActionPushNum8)
        self.ui.pushButtonNum9.clicked.connect(self.ActionPushNum9)
    def ActionPushCE(self):#删除
        if self.valueTwo != '':
            self.valueTwo = ''
            self.OutputView(self.valueTwo)
        elif self.operator !=' ':
            self.operator =' '
            self.OutputView(self.valueOne)
        else:
            self.valueOne = '0'
            self.OutputView(self.valueOne)
    def ActionPushC(self):#清除
        self.valueOne = '0'
        self.operator = ' '
        self.valueTwo = ''
        self.valueOut = ''
        self.OutputView(self.valueOne)
    def ActionPushBac(self):#退格
        if self.valueTwo != '':
            self.valueTwo = self.valueTwo[0:-1]
            self.OutputView(self.valueTwo)
        elif self.operator != ' ':
            self.operator = ' '
            self.OutputView(self.valueOne)
        elif self.valueOne != '':
            self.valueOne = self.valueOne[0:-1]
            self.OutputView(self.valueOne)            
    def ActionPushAdd(self):#加
        self.GetOperator('+')
    def ActionPushDiv(self):#除以
        self.GetOperator('/')
    def ActionPushMul(self):#乘以
        self.GetOperator('*')
    def ActionPushSub(self):#减
        self.GetOperator('-')
    def ActionPushDot(self):#点
        self.GetAvalue('.')
    def ActionPushNum0(self):
        self.GetAvalue('0')
    def ActionPushNum1(self):
        self.GetAvalue('1')
    def ActionPushNum2(self):
        self.GetAvalue('2')
    def ActionPushNum3(self):
        self.GetAvalue('3')
    def ActionPushNum4(self):
        self.GetAvalue('4')
    def ActionPushNum5(self):
        self.GetAvalue('5')
    def ActionPushNum6(self):
        self.GetAvalue('6')
    def ActionPushNum7(self):
        self.GetAvalue('7')
    def ActionPushNum8(self):
        self.GetAvalue('8')
    def ActionPushNum9(self):
        self.GetAvalue('9')
    def ActionPushEqu(self):#等于
        if self.operator is ' ':    #如果没有运算符则不进行任何运算
            pass
        elif self.operator == '+':  #如果原运算符为‘+’则进行加法运算并将结果存入第一目、将新运算符保存到运算符变量
            temp = float(self.valueOne)+float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ' '
            self.valueOne = ''            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '-':  #如果原运算符为‘-’则进行减法运算并将结果存入第一目、将新运算符保存到运算符变量
            temp = float(self.valueOne)-float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ' '
            self.valueOne = ''            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '*':  #如果原运算符为‘*’则进行乘法运算并将结果存入第一目、将新运算符保存到运算符变量
            temp = float(self.valueOne)*float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ' '
            self.valueOne = ''            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '/':  #如果原运算符为‘/’则进行除法运算并将结果存入第一目、将新运算符保存到运算符变量
            temp = float(self.valueOne)/float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ' '
            self.valueOne = ''            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        else:
            pass        
    def GetAvalue(self,value):      #获取一个输入的数字并根据实际情况将其分配到第一目或者第二目
        if self.operator == ' ':    #如果还没有运算符输入则判断当前正在进行第一目输入
            if value == '0' and self.valueOne == '0': #如果输入为‘0’且原第一目也为‘0’则只保留一个‘0’(就是数字不可能会出现‘00’)
                self.valueOne = '0'
            elif value != '.' and self.valueOne == '0':#如果原第一目为‘0’而新输入的值不是小数点则清除原数以新输入数据代替(数字可能会出现‘0.8’、‘8’但不应该出现‘08’)
                self.valueOne = value
            else: 
                self.valueOne += value #如果不是上述两种情况则将输入数字直接加到第一目末尾
            self.OutputView(self.valueOne)
        else:                       #如果此时已经有了运算符则判定现在正在进行第二目输入
            if value == '0' and self.valueTwo == '0': #以下判断过程与第一目输入时相同,应保证数字输入时不出现‘00’、‘08’等情况
                self.valueTwo = '0'
            elif value != '.' and self.valueTwo == '0':
                self.valueTwo = value
            else:
                self.valueTwo += value 
            self.OutputView(self.valueTwo)
    def GetOperator(self,ope):      #获取运算符号
        if self.valueOne == '' and self.valueOut == '': #如果尚未输入第一目且无上次计算结果,则输入运算符没有意义,不进行任何操作
            pass
        elif self.valueOne == '' and self.valueOut != '':#如果尚未输入第一目而有上次计算结果,则将上次计算的结果作为第一目,并保存运算符
            self.valueOne = self.valueOut
            self.operator = ope       
        elif self.valueTwo == '':#如果尚未输入第二个数
            self.operator = ope#直接变更运算符
            self.history = self.valueOne+self.operator
            self.OutputView(self.valueOne)
        elif self.operator == '+': #如果原来有运算符且有两个运算目则进行运算,将结果保存为新的第一运算目,并保存新的运算符
            temp = float(self.valueOne)+float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ope
            self.valueOne = str(temp)            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '-':
            temp = float(self.valueOne)-float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ope
            self.valueOne = str(temp)            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '*':
            temp = float(self.valueOne)*float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ope
            self.valueOne = str(temp)            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        elif self.operator == '/':
            temp = float(self.valueOne)/float(self.valueTwo)
            self.history = self.valueOne+self.operator+self.valueTwo
            self.operator = ope
            self.valueOne = str(temp)            
            self.valueTwo = ''
            self.valueOut = str(temp)        
            self.valueOut = self.DeleteLastZeroWithDot(self.valueOut)
            self.OutputView(self.valueOut)
        else:
            pass        
    def DeleteLastZeroWithDot(self,data): #清除小数点后多余的‘0’(例如函数带入参数250.0,返回结果为250)
        backData = data
        if('.' in data):
            if(data[-1] is '0'):
                backData = data[0:-2]
        return backData
    def OutputView(self,value): #显示输出函数
        self.ui.textEditResult.setText(value+'rn'+self.history)
    def keyPressEvent(self, event): #获取键盘输入的消息(数字输入尚有问题)
            if event.key() == QtCore.Qt.Key_Escape:
                self.close()
            if event.key() == QtCore.Qt.Key_Backspace:
                self.ActionPushBac()
            if event.key() == QtCore.Qt.Key_Delete:
                self.ActionPushCE()
            if event.key() == QtCore.Qt.Key_0:
                self.ActionPushNum0()
            if event.key() == QtCore.Qt.Key_1:
                self.ActionPushNum1()
            if event.key() == QtCore.Qt.Key_2:
                self.ActionPushNum2()
            if event.key() == QtCore.Qt.Key_3:
                self.ActionPushNum3()
            if event.key() == QtCore.Qt.Key_4:
                self.ActionPushNum4()
            if event.key() == QtCore.Qt.Key_5:
                self.ActionPushNum5()
            if event.key() == QtCore.Qt.Key_6:
                self.ActionPushNum6()
            if event.key() == QtCore.Qt.Key_7:
                self.ActionPushNum7()
            if event.key() == QtCore.Qt.Key_8:
                self.ActionPushNum8()
            if event.key() == QtCore.Qt.Key_9:
                self.ActionPushNum9()
            if event.key() == QtCore.Qt.Key_Period:#.
                self.ActionPushDot()
            if event.key() == QtCore.Qt.Key_Enter:#=
                self.ActionPushEqu()
            if event.key() == QtCore.Qt.Key_Plus:#+
                self.ActionPushAdd()
            if event.key() == QtCore.Qt.Key_Minus:#-
                self.ActionPushSub()
            if event.key() == QtCore.Qt.Key_Asterisk:#*
                self.ActionPushMul()
            if event.key() == QtCore.Qt.Key_Slash:#/
                self.ActionPushDiv()

        
>if __name__ == '__main__': 
      app = QtGui.QApplication(sys.argv)
    window = Calculator()
      window.show()
    sys.exit(app.exec_())

#END

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sumuzhe1511/article/details/51332846
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:15:37
  • 阅读 ( 898 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢