tkinter 制作计算器

import tkinter as tk

class Ui(tk.Tk):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        # self.geometry("600x400+400+10")
        self.title("计算器")
        self['background'] = "gray"
        self.attributes("-alpha",0.9)#设置透明度
        font = ("黑体",18)

        self.result_var = tk.StringVar()
        self.result_var.set("")
        self.lab = tk.Label(self,textvariable=self.result_var,font=font,height=2,width=30,justify=tk.RIGHT,anchor=tk.SE)
        self.lab.grid(column=1,row=1,columnspan=5)

        btn_clear = tk.Button(self,text='C',font=font,width=5,relief=tk.FLAT,bg='#b1b2b2')
        btn_back = tk.Button(self,text='<-',font=font,width=5,relief=tk.FLAT,bg='#b1b2b2')
        btn_mod = tk.Button(self,text='/',font=font,width=5,relief=tk.FLAT,bg='#b1b2b2')
        btn_mul = tk.Button(self,text='X',font=font,width=5,relief=tk.FLAT,bg='#b1b2b2')
        btn_clear.grid(column=2,row=2,padx=4,pady=2)
        btn_back.grid(column=3,row=2,padx=4,pady=2)
        btn_mod .grid(column=4,row=2,padx=4,pady=2)
        btn_mul.grid(column=5,row=2,padx=4,pady=2)

        btn_7 = tk.Button(self, text='7', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_8 = tk.Button(self, text='8', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_9 = tk.Button(self, text='9', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_sub = tk.Button(self, text='-', font=font, width=5, relief=tk.FLAT, bg='#b1b2b2')
        btn_7.grid(column=2,row=3,padx=4,pady=2)
        btn_8.grid(column=3,row=3,padx=4,pady=2)
        btn_9.grid(column=4,row=3,padx=4,pady=2)
        btn_sub.grid(column=5,row=3,padx=4,pady=2)

        btn_4 = tk.Button(self, text='4', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_5 = tk.Button(self, text='5', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_6 = tk.Button(self, text='6', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_add = tk.Button(self, text='+', font=font, width=5, relief=tk.FLAT, bg='#b1b2b2')
        btn_4.grid(column=2,row=4,padx=4,pady=2)
        btn_5.grid(column=3,row=4,padx=4,pady=2)
        btn_6.grid(column=4,row=4,padx=4,pady=2)
        btn_add.grid(column=5,row=4,padx=4,pady=2)

        btn_1 = tk.Button(self, text='1', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_2 = tk.Button(self, text='2', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_3 = tk.Button(self, text='3', font=font, width=5, relief=tk.FLAT, bg='#eacd1a')
        btn_equal = tk.Button(self, text='=', font=font, width=5, height=3,relief=tk.FLAT, bg='#b1b2b2')
        btn_1.grid(column=2, row=5, padx=4, pady=2)
        btn_2.grid(column=3, row=5, padx=4, pady=2)
        btn_3.grid(column=4, row=5, padx=4, pady=2)
        btn_equal.grid(column=5, row=5, padx=4, pady=2,rowspan=2)

        btn_0 = tk.Button(self, text='0', font=font, width=14, relief=tk.FLAT, bg='#b1b2b2')
        btn_point = tk.Button(self, text='.', font=font, width=5, relief=tk.FLAT, bg='#b1b2b2')
        btn_0.grid(column=2, row=6, padx=4, pady=2,columnspan=2)
        btn_point.grid(column=4, row=6, padx=4, pady=2)

        btn_0.config(command=lambda :self.on_btn_click('0'))
        btn_1.config(command=lambda :self.on_btn_click('1'))
        btn_2.config(command=lambda :self.on_btn_click('2'))
        btn_3.config(command=lambda :self.on_btn_click('3'))
        btn_4.config(command=lambda :self.on_btn_click('4'))
        btn_5.config(command=lambda :self.on_btn_click('5'))
        btn_6.config(command=lambda :self.on_btn_click('6'))
        btn_7.config(command=lambda :self.on_btn_click('7'))
        btn_8.config(command=lambda :self.on_btn_click('8'))
        btn_9.config(command=lambda :self.on_btn_click('9'))
        btn_point.config(command=lambda :self.on_btn_click('.'))
        btn_add.config(command=lambda :self.on_btn_click('+'))
        btn_sub.config(command=lambda :self.on_btn_click('-'))
        btn_mul.config(command=lambda :self.on_btn_click('*'))
        btn_mod.config(command=lambda :self.on_btn_click('/'))
        btn_equal.config(command=self.jisuan)
        btn_clear.config(command=self.on_clear)
        btn_back.config(command=self.on_back)

    def on_btn_click(self,data):
        '''业务逻辑代码'''
        ...
    def jisuan(self):
        ...
    def show(self):
        self.mainloop()

    def on_clear(self):
        ...
    def on_back(self):
        ...

class Caluator(Ui):
    def on_btn_click(self,data):
        self.result_var.set(self.result_var.get()+data)

    def jisuan(self):
        opt = self.result_var.get()
        result = eval(opt)
        self.result_var.set(str(result))
    def on_clear(self):
        self.result_var.set('')

    def on_back(self):
        if len(self.result_var.get())==0:
            return
        self.result_var.set(self.result_var.get()[:-1]) #去掉最后一个字符


if __name__ == '__main__':
    app = Caluator()
    app.show()

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值