常见的计算辅助工具有两种,一种是古人发明的算盘,一种是我们现代人发明的计算器。与珠算相比,计算器更方便,计算速度比珠算好。在本文中,我们使用Python来实现一个简单的计算器。意识到我们几乎每个人都使用过计算器。每个人都应该熟悉计算器。计算器整体比较简单,主要包括:显示、键盘、计算的逻辑处理等。我们使用计算器tkinter库实现的图形化界面,我们来看看具体的实现过程。首先我们绘制一个主窗口,代码实现如下:#创建主窗口tk=tkinter.Tk()#设置窗口大小和位置tk.geometry('300x210+500+200')#不是允许改变窗口大小tk.resizable(False,False)#设置窗口标题tk.title('calculator')看效果:我们继续绘制显示,代码实现如下:#自动刷新string变量,可以使用set和get方法传递和获取值文本框为只读contentEntry['state']='readonly'#设置文本框坐标和宽高contentEntry.place(x=20,y=10,width=260,height=30)看效果:然后绘制键盘,代码实现如下:#按钮显示内容bvalue=['C','+','-','//','2','0','1','√','3','4','5','*','6','7','8','.','9','/','**','=']index=0#将按钮放置在5x4forrowinrange(5):forcolinrange(4):d=bvalue[index]index+=1btnDigit=tkinter.Button(tk,text=d,command=lambdax=d:onclick(x))btnDigit.place(x=20+col*70,y=50+row*30,width=50,height=20)看看效果:界面画好了,我们来看看处理操作逻辑的代码,如下图:#点击事件defonclick(btn):#运算符操作=('+','-','*','/','**','//')#获取文本框中的内容content=contentVar.get()#如果已有内容以小数点开头,则在前面加0ifcontent.startswith('.'):content='0'+content#字符串可以直接加上+字符#根据不同如果btnin'0123456789'按钮反应不同:#按0-9向内容添加内容+=btnelifbtn=='.':#将内容与+-*/这些字符分开lastPart=re.split(r'\+|-|\*|/',content)[-1]如果'.'inlastPart:#信息提示对话框tkinter.messagebox.showerror('error','repeateddecimalpoint')returnelse:content+=btnelifbtn=='C':#清空文本框content=''elifbtn=='=':try:#评估输入的表达式content=str(eval(content))except:tkinter.messagebox.showerror('error','expressionerror')returnelifbtninoperation:ifcontent.endswith(operation):tkinter.messagebox.showerror('error','notallowedThereisacontinuationoperator')returncontent+=btnelifbtn=='√':#splitfrom.并存储在n中,n是一个列表n=content.split('.')#如果列表中的所有数字都是数字,检查表达式是否正确ifall(map(lambdax:x.isdigit(),n)):content=eval(content)**0.5else:tkinter.messagebox.showerror('error','expressionerror')return#在文本框中显示结果contentVar.set(content)整体实现完成后,我们来演示一下,看看效果:有内味吗?打包为了更方便的使用,我们可以将Python代码打包成一个exe文件。我们使用pyinstaller对其进行打包,使用pipinstallpyinstaller命令进行安装。打包时,我们可以使用pyinstaller--onefile--nowindowedcounter.py命令。此时打包生成的文件就是默认使用的图标。如果我们要指定自己的图标,可以加上参数--icon="xxx\xxx.ico",打包生成的文件在dist目录下,如下图:此时,我们可以直接运行exe文件即可。为了总结本文,我们使用Python实现了一个简单的计算器。如果您有兴趣,可以尝试添加更多功能和个性化键盘。源码获取自公众号Python小二后台回复200616,本文非个人号首发
