练手级计算机,快来打怪

<兄弟连Python06前期计算器————知识点

import tkinter

class jsq:
    #界面布局方法
    def __init__(self):
        self.root=tkinter.Tk()
        self.root.minsize(300,450)
        self.root.maxsize(300,450)
        self.root.title('计算器')
        #全局化变量
        #存储数字与符号变量
        self.lists=[]
        #假定按下符号键为错
        self.isPressSign=False

        #初始化界面数字为0
        self.res = tkinter.StringVar()
        self.res.set(0)
        #将运算过成输入到第一行中去包括符号案件(
        self.res2=tkinter.StringVar()

        #界面布局
        self. xsmb()
        self.caidan()
        self.root.mainloop()

    def caidan (self):


        # 创建总菜单
        menubar =tkinter.Menu(self.root)
        # 创建一个下拉菜单,并且加入文件菜单
        filemenu = tkinter.Menu(menubar)
        # 创建查看菜单的选项
        filemenu.add_command(label="打开", command=self.caidan)
        filemenu.add_command(label="存储", command=self.caidan)
        # 创建下拉菜单的分割线
        filemenu.add_separator()
        filemenu.add_command(label="关闭", command=self.root.quit)
        # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为File
        menubar.add_cascade(label="菜单", menu=filemenu)
        # 创建编辑菜单
        editmenu = tkinter.Menu(menubar, tearoff=0)
        # 创建编辑菜单选项
        editmenu.add_command(label='复制(C)', command=self.caidan)
        editmenu.add_command(label='粘贴(P)', command=self.caidan)
        menubar.add_cascade(label="编辑", menu=editmenu)
        # 显示总菜单
        self.root.config(menu=menubar)
    #按下数字的操作数字方法
    def szbtn(self,num):


        #按下符号键输出0
        if self.isPressSign==False:

            pass
        else:
            self.res.set(0)

            #重新赋值按下符号键为假
            self.isPressSign=False
        #赋值输入的数字为oldnum
        oldnum=self.res.get()
        #判断初始数字数否为0,是输出输入数字,不是将本次数字添加到新数字中输出
        if oldnum=='0':
            self.res.set(num)
        else:
            newnum=oldnum+num
            self.res.set(newnum)



    #按下符号键操作方法
    def pressCompute(self,sign):


        #将输入的数字和数入的符号都存到列表中
        num = self.res.get()

        self.lists.append(num)
        self.lists.append(sign)
        #后退键功能
        if sign=='<--':
            l=num[0:-1]
            self.res.set(l)

        #判断输入字符是否为清除键
        if sign=='c':
            self.lists.clear()
            self.res.set(0)
        #if sign=='√':
            #self.res.set(math.sqrt(num))




        #重置按键为真
        self.isPressSign=True

    #输出运算结果
    def pressEqual(self):

        #将按下运算符在次按下的数字添加到列表中
        curnum = self.res.get()

        self.lists.append(curnum)
        #按下等号触发已保存字符运算
        computeStr=''.join(self.lists)
        endnum=eval(computeStr)
        #运算结束后将储存的运算过程输出到第一个文本框
        self.res2.set(computeStr)
        #输出结果清出列表
        self.res.set(endnum)
        self.lists.clear()



    #布局界面文本框和按键方法
    def xsmb(self):
        lable=tkinter.Label(self.root,textvariable=self.res,bg='white',font=('黑体',20),anchor='e')
        lable.place(x=20,y=20,width=260,height=60)


        lable2=tkinter.Label(self.root,textvariable=self.res2,bg='blue',font=('宋体',10),anchor='e')
        lable2.place(x=20,y=20,width=260,height=20)

        #第一行符号键
        btnyichu=tkinter.Button(self.root,text='<--',font=('黑体',20),command=lambda :self.pressCompute('<--'))
        btnyichu.place(x=20,y=100,width=95,height=40)

        btnclear=tkinter.Button(self.root,text='c',font=('黑体',20),command=lambda :self.pressCompute('c'))
        btnclear.place(x=130,y=100,width=40,height=40)

        #btnsqrt = tkinter.Button(self.root, text='√', font=('黑体', 20), command=lambda: self.pressCompute('√'))
        #btnsqrt.place(x=185, y=100, width=40, height=40)

        btnmiyunsuan=tkinter.Button(self.root,text='**',font=('黑体',20),command=lambda :self.pressCompute('**'))
        btnmiyunsuan.place(x=240,y=100,width=40,height=40)
        #第一行数字键
        btn1=tkinter.Button(self.root,text='1',font=('黑体',20),command=lambda :self.szbtn('1'))
        btn1.place(x=20,y=160,width=40,height=40)

        btn2=tkinter.Button(self.root,text='2',font=('黑体',20),command=lambda :self.szbtn('2'))
        btn2.place(x=75,y=160,width=40,height=40)

        btn3=tkinter.Button(self.root,text='3',font=('黑体',20),command=lambda :self.szbtn('3'))
        btn3.place(x=130,y=160,width=40,height=40)
        #第二行符号键,除法和地板除
        btnchu=tkinter.Button(self.root,text='/',font=('黑体',20),command=lambda :self.pressCompute('/'))
        btnchu.place(x=185,y=160,width=40,height=40)

        btndibanchu=tkinter.Button(self.root,text='//',font=('黑体',20),command=lambda :self.pressCompute('//'))
        btndibanchu.place(x=240,y=160,width=40,height=40)
        #第二行数字键
        btn4=tkinter.Button(self.root,text='4',font=('黑体',20),command=lambda :self.szbtn('4'))
        btn4.place(x=20,y=220,width=40,height=40)

        btn5=tkinter.Button(self.root,text='5',font=('黑体',20),command=lambda :self.szbtn('5'))
        btn5.place(x=75,y=220,width=40,height=40)

        btn6=tkinter.Button(self.root,text='6',font=('黑体',20),command=lambda :self.szbtn('6'))
        btn6.place(x=130,y=220,width=40,height=40)
        #第三行符号,乘法,取于运算
        btncheng=tkinter.Button(self.root,text='*',font=('黑体',20),command=lambda :self.pressCompute('*'))
        btncheng.place(x=185,y=220,width=40,height=40)

        btnquyu=tkinter.Button(self.root,text='%',font=('黑体',20),command=lambda :self.pressCompute('%'))
        btnquyu.place(x=240,y=220,width=40,height=40)

        btn7=tkinter.Button(self.root,text='7',font=('黑体',20),command=lambda :self.szbtn('7'))
        btn7.place(x=20,y=280,width=40,height=40)

        btn8=tkinter.Button(self.root,text='8',font=('黑体',20),command=lambda :self.szbtn('8'))
        btn8.place(x=75,y=280,width=40,height=40)

        btn9=tkinter.Button(self.root,text='9',font=('黑体',20),command=lambda :self.szbtn('9'))
        btn9.place(x=130,y=280,width=40,height=40)

        btnjian=tkinter.Button(self.root,text='-',font=('黑体',20),command=lambda :self.pressCompute('-'))
        btnjian.place(x=185,y=280,width=40,height=40)



        btn0=tkinter.Button(self.root,text='0',font=('黑体',20),command=lambda :self.szbtn('0'))
        btn0.place(x=20,y=340,width=95,height=40)

        btndian=tkinter.Button(self.root,text='.',font=('黑体',20),command=lambda :self.szbtn('.'))
        btndian.place(x=130,y=340,width=40,height=40)

        btnjia=tkinter.Button(self.root,text='+',font=('黑体',20),command=lambda :self.pressCompute('+'))
        btnjia.place(x=185,y=340,width=40,height=40)



        btndeng=tkinter.Button(self.root,text='=',font=('黑体',20),command=lambda :self.pressEqual())
        btndeng.place(x=240,y=280,width=40,height=100)


jsq()

没学多久Python,没有各位大神趟的水多。计算机弄了一两天,做的比较糙。菜单基本是废了/(ㄒoㄒ)/~~。。。。。。函数部分本来还要有个开平方,实在没做出来还望看到的大神指点一下。

逻辑基本是按照输入数字——输入运算符——输入数字——‘=’号运算结果。

目前还有多处bug:已知1运算结束后输出结果在输入数字是直接添加到结果上的。

           2多次按下等号键只能运算一次不能直接用等号直接进行多次运算。

           3第一排记录的文本框不是从开始输入就上传另运算结束不能按键清楚用户体验较差

           。。。。。

由于还有较多功能未实现,操作不佳还望见谅

python学习资源分享群:563626388 QQ

>

原文地址:https://www.cnblogs.com/wangcheng-com/p/7901198.html