python语言利用TK实现一个简易计算器

目录

计算机功能描述

导包

代码实现

初始化数据

初始化界面

初始化显示标签

放置按钮

放置数字符

放置运算符

按钮每次输入的实现

检查data

clear函数

mainloop

组合代码

  • 计算机功能描述

具有0~9十位数字、符号’.’,以及+-*/四则运算功能,具有记忆存储功能(下一轮计算用到上一轮结果)、清零、删除功能。共18个按键。

当输入多个字符时,用后一字符覆盖前一字符。

  • 导包

import tkinter as tk

本计算器使用tkinter包实现,as tk是给tkinter重新起了个名字

  • 代码实现

初始化数据

temp=0#记忆上一轮计算的结果
data=[]#记录每一次的按钮输入
check_op="+-*/=bc."

data用来存储每一次按钮的输入或删除,最终通过eval来实现计算。

初始化界面

screen=tk.Tk()
screen.title("计算器")
screen.geometry('340x400')

初始化显示标签

textvar=tk.StringVar()
textvar.set('0')
my_label=tk.Label(screen,textvariable=textvar,width=35,height=4,anchor='e')
my_label.grid(row=0,column=0,columnspan=4)

textvar为标签的可变文本,每一次data的改变都要执行一次textvar.set()

放置按钮

def place_button(master, text, row, col, colspan=1, padx=2, pady=2, width=9, height=2):
    my_button=tk.Button(master,text=text,width=width,height=height)
    my_button.config(command=lambda :add_to_list(text))
    my_button.grid(row=row,column=col,padx=padx,pady=pady,columnspan=colspan)

text为显示文字,row,col为放置行列位置。colspan为按钮横跨格数,padx,pady文本距离边框的距离。width,height按钮的宽和高。

按钮的出发事件为add_to_list,将按钮的文本,也就是按钮上显示的字符,加入到data列表中,等待计算

放置数字符

place_button(screen,text='7',row=1,col=1)
place_button(screen,text='8',row=1,col=2)
place_button(screen,text='9',row=1,col=3)
place_button(screen,text='4',row=2,col=1)
place_button(screen,text='5',row=2,col=2)
place_button(screen,text='6',row=2,col=3)
place_button(screen,text='1',row=3,col=1)
place_button(screen,text='2',row=3,col=2)
place_button(screen,text='3',row=3,col=3)
place_button(screen,text='0',row=4,col=1,colspan=2,width=20)
place_button(screen,text='.',row=4,col=3)

放置运算符

place_button(screen,text='=',row=5,col=3)
place_button(screen,text='b',row=5,col=4)
place_button(screen,text='c',row=5,col=1,colspan=2,width=20)

place_button(screen,text='/',row=1,col=4)
place_button(screen,text='*',row=2,col=4)
place_button(screen,text='-',row=3,col=4)
place_button(screen,text='+',row=4,col=4)

按钮每次输入的实现

def add_to_list(num):
    data.append(num)
    if data[-1] in check_op:
        check()
    else:
        textvar.set("".join(data))

        将符号加入到data列表中,并且当输入非数字字符时进行检查。

检查data

def check():
    global temp
    global data
    if temp !=0 :#如果在上一次计算结束后,按下任意非数字字符,则上一运算结果加入计算
        if data[-1]=='.':
            textvar.set('0')
            return
        op=data[-1]
        data.clear()
        for i in str(temp):
            data.append(i)
        data.append(op)
        temp=0
    if data[-2] in check_op:#如果倒数第二个字符也是非数字字符,则覆盖
        data[-2]=data[-1]
        data.pop()
    if data[-1] == 'b':#如果字符为删除字符,删除列表最后一位
        data = data[:-2]
        textvar.set("".join(data))#实现显示功能
    if data[-1] =='c':#清零
        clear()
    elif data[-1]=='=':#计算
        try:
            temp =eval("".join(data[:-1]))#存储此次计算结果
            textvar.set("".join(data)+str(temp))
            data.clear()#计算后data清空
        except Exception:
            textvar.set("error")#计算错误则输出error
    else:
        textvar.set("".join(data))

详细见注释。check函数实现了运算符号的使用,符号覆盖以及记忆上一运算结果的功能。

clear函数

  def clear():
    data.clear()
    textvar.set('0')

        data列表清空

mainloop

screen.mainloop()
  • 组合代码

import tkinter as tk

temp=0
data=[]
check_op="+-*/=bc."

#检查输入
def check():
    global temp
    global data
    if temp !=0 :#如果在上一次计算结束后,按下任意非数字字符,则上一运算结果加入计算
        if data[-1]=='.':
            textvar.set('0')
            return
        op=data[-1]
        data.clear()
        for i in str(temp):
            data.append(i)
        data.append(op)
        temp=0
    if data[-2] in check_op:#如果倒数第二个字符也是非数字字符,则覆盖
        data[-2]=data[-1]
        data.pop()
    if data[-1] == 'b':#如果字符为删除字符,删除列表最后一位
        data = data[:-2]
        textvar.set("".join(data))#实现显示功能
    if data[-1] =='c':#清零
        clear()
    elif data[-1]=='=':#计算
        try:
            temp =eval("".join(data[:-1]))#存储此次计算结果
            textvar.set("".join(data)+str(temp))
            data.clear()#计算后data清空
        except Exception:
            textvar.set("error")#计算错误则输出error
    else:
        textvar.set("".join(data))

#清除输入
def clear():
    data.clear()
    textvar.set('0')

#输入
def add_to_list(num):
    data.append(num)
    if data[-1] in check_op:
        check()
    else:
        textvar.set("".join(data))

#放置按钮
def place_button(master,text,row,col,colspan=1,padx=2,pady=2,width=9,height=2):
    my_button=tk.Button(master,text=text,width=width,height=height)
    my_button.config(command=lambda :add_to_list(text))
    my_button.grid(row=row,column=col,padx=padx,pady=pady,columnspan=colspan)

screen=tk.Tk()
screen.title("计算器")
screen.geometry('340x400')

textvar=tk.StringVar()
textvar.set('0')
my_label=tk.Label(screen,textvariable=textvar,width=35,height=4,anchor='e')
my_label.grid(row=0,column=0,columnspan=4)
place_button(screen,text='7',row=1,col=1)
place_button(screen,text='8',row=1,col=2)
place_button(screen,text='9',row=1,col=3)
place_button(screen,text='4',row=2,col=1)
place_button(screen,text='5',row=2,col=2)
place_button(screen,text='6',row=2,col=3)
place_button(screen,text='1',row=3,col=1)
place_button(screen,text='2',row=3,col=2)
place_button(screen,text='3',row=3,col=3)
place_button(screen,text='0',row=4,col=1,colspan=2,width=20)
place_button(screen,text='.',row=4,col=3)
place_button(screen,text='=',row=5,col=3)
place_button(screen,text='b',row=5,col=4)
place_button(screen,text='c',row=5,col=1,colspan=2,width=20)

place_button(screen,text='/',row=1,col=4)
place_button(screen,text='*',row=2,col=4)
place_button(screen,text='-',row=3,col=4)
place_button(screen,text='+',row=4,col=4)

screen.mainloop()
  • 成品展示

copy自我的实验报告

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值