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

编程入门 行业动态 更新时间:2024-10-23 21:24:25

python语言利用TK实现一个简易<a href=https://www.elefans.com/category/jswz/34/1765079.html style=计算器"/>

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实现一个简易计算器

本文发布于:2024-02-11 20:49:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1683393.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:计算器   简易   语言   python   TK

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!