• python ——计算器


    from tkinter import *
    import parser
    from math import factorial
    
    root = Tk()
    root.title("计算器")
    
    # i keeps the track of current position on the input text field
    i = 0
    # Receives the digit as parameter and display it on the input field
    def get_variables(num):
        global i
        display.insert(i,num)
        i+=1
    
    def clear_all():
        display.delete(0,END)
    
    #add the input field
    display = Entry(root)
    display.grid(row=1,columnspan=6,sticky=N+E+S+W)
    
    def get_operation(operator):
        global i
        length = len(operator)
        display.insert(i,operator)
        i+=length
    
    #删除一个
    def undo():
        entire_string = display.get()
        if len(entire_string):
            new_string = entire_string[:-1]
            clear_all()
            display.insert(0,new_string)
        else:
            clear_all()
            display.insert(0,"Error")
    
    def calculate():
        entire_string = display.get()
        try:
            a = parser.expr(entire_string).compile()
            result = eval(a)
            clear_all()
            display.insert(0,result)
        except Exception:
            clear_all()
            display.insert(0,"Error")
    
    def undo():
        entire_string = display.get()
        if len(entire_string):
            new_string = entire_string[:-1]
            clear_all()
            display.insert(0,new_string)
        else:
            clear_all()
            display.insert(0,"Error")
    
    #Code to add buttons to the Calculator
    #这里click函数就与button这个插件关联了,但是不好的地方就是不能传递参数。tkinter要求由按钮(或者其它的插件)
    # 触发的控制器函数不能含有参数,
    # 目的就是为了以统一的方式去调用他们。那么我们有什么办法给函数传递参数,因为这经常会用到。答案就是使用lambda。
    Button(root,text="1",command=lambda: get_variables(1)).grid(row=2,column=0,sticky=N+S+E+W)
    Button(root,text="2",command=lambda: get_variables(2)).grid(row=2,column=1,sticky=N+S+E+W)
    Button(root,text="3",command=lambda: get_variables(3)).grid(row=2,column=2,sticky=N+S+E+W)
    
    Button(root,text="4",command=lambda : get_variables(4)).grid(row=3,column=0,sticky=N+S+E+W)
    Button(root,text="5",command=lambda: get_variables(5)).grid(row=3,column=1,sticky=N+S+E+W)
    Button(root,text="6",command=lambda: get_variables(6)).grid(row=3,column=2,sticky=N+S+E+W)
    
    Button(root,text="7",command=lambda : get_variables(7)).grid(row=4,column=0,sticky=N+S+E+W)
    Button(root,text="8",command=lambda: get_variables(8)).grid(row=4,column=1,sticky=N+S+E+W)
    Button(root,text="9",command=lambda: get_variables(9)).grid(row=4,column=2,sticky=N+S+E+W)
    
    #添加清除所有按钮
    Button(root,text="AC",command=lambda: clear_all()).grid(row=5,column=0,sticky=N+S+E+W)
    Button(root,text="0",command=lambda: get_variables(0)).grid(row=5,column=1,sticky=N+S+E+W)
    Button(root,text=".",command=lambda: get_variables(".")).grid(row=5,column=2,sticky=N+S+E+W)
    
    
    Button(root,text="+",command= lambda :get_variables("+")).grid(row=2,column=3, sticky=N+S+E+W)
    Button(root,text="-",command= lambda :get_operation("-")).grid(row=3,column=3, sticky=N+S+E+W)
    Button(root,text="*",command= lambda :get_operation("*")).grid(row=4,column=3, sticky=N+S+E+W)
    Button(root,text="/",command= lambda :get_operation("/")).grid(row=5,column=3, sticky=N+S+E+W)
    
    # adding new operations
    Button(root,text="pi",command= lambda :get_operation("*3.14")).grid(row=2,column=4, sticky=N+S+E+W)
    Button(root,text="%",command= lambda :get_operation("%")).grid(row=3,column=4, sticky=N+S+E+W)
    Button(root,text="(",command= lambda :get_operation("(")).grid(row=4,column=4, sticky=N+S+E+W)
    Button(root,text="exp",command= lambda :get_operation("**")).grid(row=5,column=4, sticky=N+S+E+W)
     
    Button(root,text="<-",command= lambda :undo()).grid(row=2,column=5, sticky=N+S+E+W)
    Button(root,text="x!", command= lambda: fact()).grid(row=3,column=5, sticky=N+S+E+W)
    Button(root,text=")",command= lambda :get_operation(")")).grid(row=4,column=5, sticky=N+S+E+W)
    Button(root,text="^2",command= lambda :get_operation("**2")).grid(row=5,column=5, sticky=N+S+E+W)
    Button(root,text="^2",command= lambda :get_operation("**2")).grid(row=5,column=5, sticky=N+S+E+W)
    Button(root,text="=",command= lambda :calculate()).grid(columnspan=6, sticky=N+S+E+W)
    
    root.mainloop()
  • 相关阅读:
    C# 使用Lazy 懒加载
    软件测试用例报告整理
    什么是事务,为什么要引入事务?
    WPF+DataGrid+MySQL实现增删改查、Excel文件导出
    git 设置远程库别名
    Access Like内存溢出问题排查,并找出相应的包含26个日文片假名数据的sql语句
    java 离线中文语音文字识别
    fbx的法线设置方式引起的显示不正确
    C#定时job
    CSS3+js实现循环滚动文字播放与暂停demo
  • 原文地址:https://www.cnblogs.com/shunguo/p/14563166.html
Copyright © 2020-2023  润新知