使用python的tkinter库自制计算器ui界面

原理

tkinter库

主要使用label和buttom,具体了解看教程https://www.cnblogs.com/shwee/p/9427975.html

eval函数

这个函数能把字符串转化为代码执行,在这里对于简化代码很有帮助。
https://www.runoob.com/python/python-func-eval.html

源代码

import tkinter as tk
import tkinter.messagebox

root = tk.Tk()
root.title("calcutor")

equ = tk.StringVar()
equ.set("")

def backspace():
    var = equ.get()
    flag = 0
    flag += var.count("+")
    flag += var.count("-")
    flag += var.count("*")
    flag += var.count("/")
    if "=" in var and flag <= 1:
        k = var.index("=")
        equ.set(var[:k])
    else:
        equ.set(equ.get()[:-1])
    flag = 0
    
def show(push_var):
    equ.set(equ.get()+str(push_var))

def clear():
    equ.set("")

def calculate():
    var=equ.get()
    if "=" in var:
        k=var.index("=")
        equ.set(var[k+2:])
    try:
        result = eval(equ.get())
        equ.set(equ.get()+ "=\n" + str(result))
    except Exception:
        tkinter.messagebox.showerror(title='fail', message='check your input please')

l=tk.Label(root,bg='black',fg='white',width=25,height=2,relief="raised",textvariable=equ)
l.grid(row=0,column=0,padx=5,pady=5,columnspan=4)

tk.Button(root,text="C",width=5,command=clear).grid(row=1,column=0)
tk.Button(root,text="÷",width=5,command=lambda:show("/")).grid(row=1,column=1)
tk.Button(root,text="x",width=5,command=lambda:show("*")).grid(row=1,column=2)
tk.Button(root,text="DEL",width=5,command=backspace).grid(row=1,column=3)

tk.Button(root,text="7",width=5,command=lambda:show("7")).grid(row=2,column=0)
tk.Button(root,text="8",width=5,command=lambda:show("8")).grid(row=2,column=1)
tk.Button(root,text="9",width=5,command=lambda:show("9")).grid(row=2,column=2)
tk.Button(root,text="-",width=5,command=lambda:show("-")).grid(row=2,column=3)

tk.Button(root,text="4",width=5,command=lambda:show("4")).grid(row=3,column=0)
tk.Button(root,text="5",width=5,command=lambda:show("5")).grid(row=3,column=1)
tk.Button(root,text="6",width=5,command=lambda:show("6")).grid(row=3,column=2)
tk.Button(root,text="+",width=5,command=lambda:show("+")).grid(row=3,column=3)

tk.Button(root,text="1",width=5,command=lambda:show("1")).grid(row=4,column=0)
tk.Button(root,text="2",width=5,command=lambda:show("2")).grid(row=4,column=1)
tk.Button(root,text="3",width=5,command=lambda:show("3")).grid(row=4,column=2)
tk.Button(root,text="=",width=5,height=2,command=calculate).grid(row=4,column=3,rowspan=2)

tk.Button(root,text="%",width=5,command=lambda:show("%")).grid(row=5,column=0)
tk.Button(root,text="0",width=5,command=lambda:show("0")).grid(row=5,column=1)
tk.Button(root,text=".",width=5,command=lambda:show(".")).grid(row=5,column=2)


root.mainloop()

效果

在这里插入图片描述

细节

1.除法显示为"/"。
2.支持连续运算。
3.delet键删除会判断有几个运算符,然后再决定删除等号后的所有字符还是结尾一个字符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值