orz-

简单计算器的制作

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

可见计算器窗口包含了
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课件与精彩讲解

分类:

技术点:

相关文章: