• python带界面的计算器


    #python中的import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,要想使用这些文件需要用import语句把指定模块导入到当前程序中。
    import re#处理字符串的模块,如查找特定字符,删除特定字符,字符串分割等
    import tkinter#Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用。
    import tkinter.messagebox#调用tkinter模块中的messagebox函数,这个是消息框,对话框的关键,会弹出一个小框
     
    #按钮操作,点击按钮后需要做的处理
    def buttonClik(btn):
        content=contentVar.get()#获取文本框中的内容
        #如果已有内容是以小数点开头的,在前面加0
        if content.startswith('.'):
            content='0'+content#字符串可以直接用+来增加字符
        #根据不同的按钮作出不同的反应
        if btn in '0123456789':
            content+=btn#0-9中哪个键按下了,就在content字符串中增添
        elif btn=='.':
            #re.split,支持正则及多个字符切割
            lastPart=re.split(r'+|-|*|/',content)[-1]#将content从+-*/这些字符的地方分割开来,[-1]表示获取最后一个字符
            if '.'in lastPart:
                tkinter.messagebox.showerror('错误','重复出现的小数点')#出现对话框,并提示信息
                return
            else:
                content+=btn
        elif btn=='C':
            content=''#清除文本框
        elif btn=='=':
            try:
                #对输入的表达式求值
                content=str(eval(content))#调用函数eval,用字符串计算出结果
            except:
                tkinter.messagebox.showerror('错误','表达式有误')
                return
        elif btn in operators:
            if content.endswith(operators):#如果content中最后出现的+-*/
                tkinter.messagebox.showerror('错误','不允许存在连续运算符')
                return
            content+=btn
        elif btn=='Sqrt':
            n=content.split('.')#从.处分割存入n,n是一个列表
            if all(map(lambda x:x.isdigit(),n)):#如果列表中所有的都是数字,就是为了检查表达式是不是正确的
                content=eval(content)**0.5
            else:
                tkinter.messagebox.showerror('错误','表达式错误')
                return
        contentVar.set(content)#将结果显示到文本框中
     
     
    root=tkinter.Tk()#生成主窗口,用root表示,后面就在root操作
    #设置窗口大小和位置可直接联系客服QQ交代需求:953586085
    欢迎光临程序代写小店https://item.taobao.com/item.htm?spm=a230r.1.14.59.255028c3ALNkZ0&id=586797758241&ns=1&abbucket=15#detail
    root.geometry('300x270+400+100')#指定主框体大小
    #不允许改变窗口大小
    root.resizable(False,False)#框体大小可调性,分别表示x,y方向的可变性;
    #设置窗口标题
    root.title('计算器')
     
    #文本框和按钮都是tkinter中的组件
    #Entry           文本框(单行);
    #Button          按钮;
    #放置用来显示信息的文本框,设置为只读
    #tkinter.StringVar    能自动刷新的字符串变量,可用set和get方法进行传值和取值
    contentVar=tkinter.StringVar(root,'')
    contentEntry=tkinter.Entry(root,textvariable=contentVar)#括号里面,可见第一个都是root,即表示都是以root为主界面的,将文本框中的内容存在contentVar中
    contentEntry['state']='readonly'#文本框只能读,不能写
    contentEntry.place(x=10,y=10,width=280,height=20)#文本框在root主界面的xy坐标位置,以及文本框自生的宽和高
    #x:            组件左上角的x坐标;
    #y:             组件右上角的y坐标;
    #放置清除按钮和等号按钮
    btnClear=tkinter.Button(root,text='C',bg = 'red',command=lambda:buttonClik('C'))#在root主界面中放置按钮,按钮上显示C,红色,点击按钮后进入buttonClik回调函数做进一步的处理,注意传入了参数‘C’,这样就能分清是哪个按钮按下了
    #下面的内容和上面的模式都是一样的
    btnClear.place(x=40,y=40,width=80,height=20)
    btnCompute=tkinter.Button(root,text='=',bg = 'yellow',command=lambda :buttonClik('='))
    btnCompute.place(x=170,y=40,width=80,height=20)
     
    #放置10个数字、小数点和计算平方根的按钮
    digits=list('0123456789.')+['Sqrt']#序列list是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
    index=0
    #用循环的方式将上面数字、小数点、平方根这12个按钮分成四行三列进行放置
    for row in range(4):
        for col in range(3):
            d=digits[index]#按索引从list中取值,和c语言中的数组类似
            index+=1#索引号递增
            btnDigit=tkinter.Button(root,text=d,command=lambda x=d:buttonClik(x))#和上面的是类似的
            btnDigit.place(x=20+col*70,y=80+row*50,width=50,height=20)#很显然,每次放一个按钮的位置是不一样的,但是它们之间的关系时确定的
    #放置运算符按钮
    operators=('+','-','*','/','**','//')#Python的元组与列表类似,不同之处在于元组的元素不能修改。
    #元组使用小括号,列表使用方括号。
    #enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
    for index,operator in enumerate(operators):
        btnOperator=tkinter.Button(root,text=operator,bg = 'orange',command=lambda x=operator:buttonClik(x))#创建的过程和上面类似
        btnOperator.place(x=230,y=80+index*30,width=50,height=20)
     
    root.mainloop()#进入消息循环(必需组件)
    

      

    原文:https://blog.csdn.net/qq_24624539/article/details/81461690

  • 相关阅读:
    设计模式之-简单工厂模式
    C# 汉语转拼音
    深入理解DIP、IoC、DI以及IoC容器
    C# 各种帮助类大全
    C# TCP多线程服务器示例
    【AtCoder】AGC004
    【AtCoder】ARC061
    【AtCoder】CODE FESTIVAL 2016 qual A
    【AtCoder】AGC005
    【AtCoder】CODE FESTIVAL 2016 qual B
  • 原文地址:https://www.cnblogs.com/qbdj/p/11018130.html
Copyright © 2020-2023  润新知