计算器"/>
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 tempglobal dataif temp !=0 :#如果在上一次计算结束后,按下任意非数字字符,则上一运算结果加入计算if data[-1]=='.':textvar.set('0')returnop=data[-1]data.clear()for i in str(temp):data.append(i)data.append(op)temp=0if 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")#计算错误则输出errorelse:textvar.set("".join(data))
详细见注释。check函数实现了运算符号的使用,符号覆盖以及记忆上一运算结果的功能。
clear函数
def clear():data.clear()textvar.set('0')
data列表清空
mainloop
screen.mainloop()
-
组合代码
import tkinter as tktemp=0
data=[]
check_op="+-*/=bc."#检查输入
def check():global tempglobal dataif temp !=0 :#如果在上一次计算结束后,按下任意非数字字符,则上一运算结果加入计算if data[-1]=='.':textvar.set('0')returnop=data[-1]data.clear()for i in str(temp):data.append(i)data.append(op)temp=0if 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")#计算错误则输出errorelse: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自我的实验报告
更多推荐
python语言利用TK实现一个简易计算器
发布评论