不到 100 行 Python 代码写个计算器

来源:Python 技术「ID: pythonall」

我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算盘相比,计算器无论是便利性还是计算速度都是优于算盘的,本文我们使用 Python 来实现一个简易的计算器。

实现

我们几乎每个人都用过计算器,大家对于计算器应该都是比较熟悉的,计算器整体也是比较简单的,主要包括:显示器、键盘、运算的逻辑处理等,计算器的图形界面我们使用 tkinter 库实现,下面看一下具体实现过程。

首先,我们画一个主窗口,代码实现如下:

# 创建主窗口
tk = tkinter.Tk()
# 设置窗口大小和位置
tk.geometry('300x210+500+200')
# 不允许改变窗口大小
tk.resizable(False, False)
# 设置窗口标题
tk.title('计算器')

看一下效果:

我们接着画显示器,代码实现如下:

# 自动刷新字符串变量,可用 set 和 get 方法进行传值和取值
contentVar = tkinter.StringVar(tk, '')
# 创建单行文本框
contentEntry = tkinter.Entry(tk, textvariable=contentVar)
# 设置文本框为只读
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
# 将按钮进行 5x4 放置
for row in range(5):
for col in range(4):
d = bvalue[index]
index += 1
btnDigit = tkinter.Button(tk, text=d, command=lambda x=d: onclick(x))
btnDigit.place(x=20 + col * 70, y=50 + row * 30, width=50, height=20)

看一下效果:

界面画完了,我们看一下处理运算逻辑的代码,如下所示:

# 点击事件
def onclick(btn):
# 运算符
operation = ('+', '-', '*', '/', '**', '//')
# 获取文本框中的内容
content = contentVar.get()
# 如果已有内容是以小数点开头的,在前面加 0
if content.startswith('.'):
content = '0' + content # 字符串可以直接用+来增加字符
# 根据不同的按钮作出不同的反应
if btn in '0123456789':
# 按下 0-9 在 content 中追加
content += btn
elif btn == '.':
# 将 content 从 +-*/ 这些字符的地方分割开来
lastPart = re.split(r'\+|-|\*|/', content)[-1]
if '.' in lastPart:
# 信息提示对话框
tkinter.messagebox.showerror('错误', '重复出现的小数点')
return
else:
content += btn
elif btn == 'C':
# 清除文本框
content = ''
elif btn == '=':
try:
# 对输入的表达式求值
content = str(eval(content))
except:
tkinter.messagebox.showerror('错误', '表达式有误')
return
elif btn in operation:
if content.endswith(operation):
tkinter.messagebox.showerror('错误', '不允许存在连续运算符')
return
content += btn
elif btn == '√':
# 从 . 处分割存入 n,n 是一个列表
n = content.split('.')
# 如果列表中所有的都是数字,就是为了检查表达式是不是正确的
if all(map(lambda x: x.isdigit(), n)):
content = eval(content) ** 0.5
else:
tkinter.messagebox.showerror('错误', '表达式错误')
return
# 将结果显示到文本框中
contentVar.set(content)

整体实现完了之后,我们来演示一下,看一下效果:

是不是有内味了。

打包

为了更加方便的使用,我们可以将 Python 代码打包成 exe 文件,打包我们使用 pyinstaller,安装用 pip install pyinstaller 命令即可。

打包时我们使用 pyinstaller --onefile --nowindowed counter.py 命令即可,此时打包生成的文件是使用的默认图标,如果我们想指定自己的图标可以添加参数 --icon="xxx\xxx.ico",打包生成的文件在 dist 目录,如下图所示:

此时,我们直接运行 exe 文件就行了。

总结

本文我们使用 Python 实现了一个简易的计算器,大家如果有兴趣的话,可以尝试添加更多的功能以及对键盘进行个性化修改。

(0)

相关推荐

  • tkinter窗口的after方法 | Python笔记

    tkinter窗口,比如root窗口,以及Toplevel窗口,都有一个after方法.此方法执行后,将会在规定的时间间隔之后,执行一个特定的您指定的函数.如果在您指定的这个定时执行的函数中,再次调用 ...

  • 初识Python的GUI编程

    闲话 前几天有位人吐槽我的公众号内容除了爬虫还是爬虫,看的想吐.其实我写爬虫写的也快吐了,但是限于自己水平,我现在只会写爬虫啊!!. 一方面,公众号要保持定期更新:另一方面自己又在读研面临论文毕业等压 ...

  • python tkinter窗口

    Python有多个图形开发界面的库,如wxPython.Jython等,本篇介绍的是Tkinter. Tkinter是Python的标准Tk GUI工具包的接口,可以在大多数的平台下使用. 要使用Tk ...

  • Python的门面担当

    在大多数时候,我们都在黑黢黢的控制台里执行 Python 脚本.这看起来很酷很 GEEK.但对于部分场景下的用户来说,这样就不大美观和人性化了:我们需要交互更方便的图形化产品,也就是 GUI(图形用户 ...

  • python 案例2:计算器

    图像处理写了好久,内容实在是太多了,代码运行起来还是难调的 . 今天来一篇python的,代码也调了半天 . 本篇是一个小例子,用python+tkinter写的一个计算器,此计算器比较简单,仅能实现 ...

  • 再见PDF提取收费!我用100行Python代码搞定!

    第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将PDF文件中的文字.图片和表格数据提取出来的问题.能够对PDF文件中的文字.表格等数据 ...

  • 如何用100行Python代码做出魔性声控游戏“八分音符酱”

    最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩). 这个游戏叫做<不要停!八分音符酱♪>.它是一款来自岛国的恶搞游戏,主角是一 ...

  • 30行Python代码实现蚂蚁森林自动偷能量(附源码)

    虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化.之前通过用代码模拟手机点按的方式,实现了 朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋 ...

  • 什么,3行Python代码就能获取海量数据?

    Python爬虫与数据挖掘 1周前 以下文章来源于法纳斯特 ,作者小F 本文转载自公众号[法纳斯特],详情可以点击上方卡片,关注该公众号,获取更多好文推荐. 一谈起数据分析,首先想到的就是数据,没有数 ...

  • 6行python代码的爱心线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...

  • 10行Python代码的词云

    什么是词云呢? 词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思. 现在 ...

  • 不到70行Python代码,轻松玩转RFM用户分析模型(附案例数据和代码)

    本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一. 注:想直接下载代码和数据的同学可以空降文末 看这篇文章前源数据长这样: 学完后 ...

  • 如何避免把 Python 代码写得跟屎一样

    同样的功能,你可以使用不同的代码方式来实现,它们,都可以跑的起来,而在背后的那些「跳动」着的代码,有的美如诗,有的丑如屎...如果说,代码是有生命的,那么你希望它是温柔的天仙,还是抠脚的大汉? 你在 ...

  • 女友半夜加班发自拍,IT男友用30行python代码发现惊天秘密

    点击上方"机器学习爱好者社区" 选择"星标"公众号,重磅干货,第一时间送达 这是一个悲伤的故事 昨天,我司的python开发小哥刚准备下班陪女友共进晚餐,满心期 ...