zoukankan      html  css  js  c++  java
  • 简单计算器的制作

    简单计算器的制作

    首先我们观察一下一个简单的计算器有哪些组件:

    可见计算器窗口包含了
    1.窗口名称——计算器
    2.用户输入界面
    3.诸多按钮组件

    接下来我们就用代码实现一个简单计算器的编程:

    #第一步:创建根窗口并命名
    from tkinter import *  #python 标准的GUI(Graphical User Interface 库) 导入
    root=Tk()             #创建根窗口
    root.title('计算器')   #窗口名称
    
    #第二步:创建用户输入界面
    formula=StringVar()                   #接受用户输入变量存入formula
    formula.set('0')                      #将最初变量设定为0
    show=Entry(textvariable=formula)      #Entry组件用于显示可变文本内容,textvariable是可变文本内容
    show.pack(side=TOP)                   #将其打包并放置在最上方'TOP'
    
    #第三步:制作按钮组件
    btnlines=[['CE','C','DEL','÷'],
              ['7','8','9','×'],
              ['4','5','6','-'],
              ['1','2','3','+'],
              ['±','0','.','=']
              ]                                   #将所有按钮按行排列好(这里为了方便就省略有%那一行)
    
    def caculate(f,k):                            #定义计算函数,f代表用户输入的公式,k代表用户的按键
        btnfunction=['CE','C','DEL','=','±']      #将按钮分为三类:功能键,数字键,符号键
        btnnumber=['%d'%i for i in range(0,10)]   
        btnsign=['÷','×','-','+']
        s=f.get()                                 #获取现在的公式字符串
        if k in btnnumber:                        #如果按钮属于数字键,则要考虑3种情况
            if s=='0':                            #如果目前是初始状态,则按下的按钮应该替代0
                f.set(k)
            elif len(s)>=2:
                if s[-2] in ['/','*','-','+'] and s[-1]=='0': #如果目前公式是一个符号键接一个0,例如'/0',则要将输入的k替换0
                    f.set(s[:-1]+k)
                else:                                 #其他情况只需要在公式后面添加次数字就可以
                    f.set(s+k)
            else:
                f.set(s+k)
        elif k in btnsign:                        #如果k是符号键
            if k=='÷':                            #将'÷'转化为计算机能识别的'/'
                f.set(s+'/')
            elif k=='×':                          #将'×'转化为计算机能识别的'*'
                f.set(s+'*')
            else:
                f.set(s+k)
        elif k in btnfunction:                    #如果k是功能键
            if k=='CE':                           #这里为了简化,就把'CE'和'C'都看作一样的重置了
                f.set('0')
            elif k=='C':
                f.set('0')
            elif k=='DEL':                        #删除键——只取最后一个字符前面的公式
                f.set(s[:-1])
            elif k=='±':                          #将公式变为负(并不严谨,这里为了方便就直接在前面添加'-'号)
                if s[0]=='-':
                    f.set(s[1:])
                else:
                    f.set('-'+s)
            elif k=='=':                          #直接用eval计算公式,并返回一个字符串值
                f.set(str(eval(f.get())))
        else:
            f.set(s+k)                            #将'.'的情况补充在这里
        return True
    
    for line in btnlines:
        lineFrame=Frame(root)
        for key in line:
            btn=Button(lineFrame,text=key,bg='white',font=('Verdana',16),width=5,command=lambda f=formula,k=key:caculate(f,k))
            btn.pack(side=LEFT)
        lineFrame.pack(side=TOP)
    
    mainloop()
    

    最后的成果图:

    附:


    【参考文献】
    [0]老师提供的PPT课件与精彩讲解

  • 相关阅读:
    反射
    注解
    file
    exception(异常)
    MySQL问题
    maven 中 遇到的问题
    Java读取文本数字
    人民币-欧元预测(ARIMA算法)代码
    云平台项目--学习经验--jsrender前端渲染模板
    云平台项目--学习经验--BootstrapValidate表单验证插件
  • 原文地址:https://www.cnblogs.com/orz-/p/14186238.html
Copyright © 2011-2022 走看看