python 写一个计算器_用 Python 写个计算器
首页 专栏 python 文章详情
0
用 Python 写个计算器
Python小二 发布于 56 分钟前
我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算盘相比,计算器无论是便利性还是计算速度都是优于算盘的,本文我们使用 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 实现了一个简易的计算器,大家如果有兴趣的话,可以尝试添加更多的功能以及对键盘进行个性化修改。
源码在公众号 Python小二 后台回复 200616 获取。
本文非首发于个人号
python
阅读 29 发布于 56 分钟前
赞
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
Python小二
公众号:Python小二
115 声望
343 粉丝 关注作者
0 条评论
得票 时间
提交评论
Python小二
公众号:Python小二
115 声望
343 粉丝 关注作者
宣传栏
目录
▲
我们常见的计算辅助工具有两种,一种是古人发明的算盘,另一种就是我们现代人发明的计算器,与算盘相比,计算器无论是便利性还是计算速度都是优于算盘的,本文我们使用 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 实现了一个简易的计算器,大家如果有兴趣的话,可以尝试添加更多的功能以及对键盘进行个性化修改。
源码在公众号 Python小二 后台回复 200616 获取。
本文非首发于个人号
python 写一个计算器_用 Python 写个计算器相关推荐
- python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python
假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...
- 使用python做一个闹钟_用Python写一个简单地闹钟
一.闹钟程序如下: import sys import string from time import sleep sa = sys.argv lsa = len(sys.argv) if lsa ! ...
- 使用python做一个闹钟_用python做了个高级闹钟 欢迎借鉴
原标题:用python做了个高级闹钟 欢迎借鉴 音频文件放入和.py文件同级的目录下 这是简单的闹钟做法,市场上闹钟千千万万,但是自己写出来的闹钟就是不一样,不是小编我无聊,学习乐趣就是这样慢慢培养的 ...
- 用java写一个日历_使用JAVA写一个简单的日历
JAVA写一个简单的日历 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDa ...
- 用python做一个宠物系统_利用python写个桌面挂件 | 手把手带大家做只桌面宠物呗...
导语 前段时间有小伙伴留言说想让我带大家写写桌面小挂件,今天就满足一下留过类似言的小伙伴的请求呗~不过感觉写桌面的挂历啥的没意思,就简单带大家做一只桌面宠物吧~ 废话不多说,让我们愉快地开始吧~ 开发 ...
- python 定义一个负数_其实Python不难学(4):Python如何处理文本数据
文本的处理是数据分析工作中很重要的业务领域.Python的字符串变量用于操纵文本型数据.以下命令就定义了一个字符串变量,用于存放一段文本资料. 在Python中,文本数据使用一对单引号或双引号来界定的 ...
- python添加一个球_在Python中创建一个旋转球体
我已经做了这个代码,在一个球形的方式应用球谐函数,因为我正在尝试建立恒星脉动模式的模型.理想情况下,我希望能够有一个可以旋转的图像,可以保存为gif图像.我已经找到了一些代码示例,但是这些示例似乎都不 ...
- python制作一个计时器_用Python制作一个猫咪小秒表
Python基础视频教程 入门免费观看-创客学院www.makeru.com.cn 秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心 ...
- 用python画一个房子_用Python动态地画一个房子
用Python动态地画一个房子 Python代码狂人 Python代码大全 用Python动态画一个房子,我们可从上向下画,先画房顶,再依次画阁楼窗户.房屋主体.屋门及主屋窗户. 运行本程序前请确保已 ...
- 用python画一个地球_用python做一个地球围绕太阳转的图形
匿名用户 1级 2017-07-21 回答 平台: python2.7.10 + wxpython 3.0.2 #!/usr/bin/env python #-*- coding: utf-8 -*- ...
最新文章
- 中国功率半导体产业销售规模与投资策略研究报告2022版
- C语言 | C语言实现日历打印
- dsPIC30F 细节点问题不定期更新ing
- 【算法系列之十二】最接近的三数之和
- 字典(dict)按键(key)和值(value)排序即item()的常用方式
- Codeforces Beta Round #22 (Div. 2 Only) E. Scheme(DFS+强连通)
- echarts里面的参数解释_SPMSM控制:传统PI速度环参数的整定
- markdown语法笔记(二)
- apache反向代理实战
- Oracle管理存储架构(二)--Oracle管理数据块空间
- Atitit 翻页功能的解决方案与版本历史 v4 r49
- 2015计算机二级office真题,2015计算机二级office题库(含答案)
- zip 命令实现批量文件压缩
- 工作流引擎 Activiti 教程(非常详细)
- canvas 实现图片添加水印
- pdf转换成word后有文字叠加_pdf转成word后格式快速调整
- 计算机设置了密码后不能打印了,为什么电脑设置了开机密码后就不能打印了
- 第三届艺星超级品牌日钜献·世界名曲音乐会,全网直播!
- 王牌战争文明重启服务器维护中,王牌战争文明重启常见问题解答-王牌战争文明重启常见问题一览_牛游戏网...
- Skia引擎API整理介绍(skia in Android 2.3 trunk)
热门文章
- 求某一范围内的水仙花数 python
- java weblogic.wlst_Weblogic - 使用Wlst获取部署类型
- 亚马逊站外引流:海外KOL营销
- 什么是软件测试?软件测试的目的是什么?划分为哪几个阶段?
- 三种架构模式——MVC、MVP、MVVM
- 什么情况下运放才能用虚短和虚断的概念1、在开环电路中,输入两端的电压差非常小,不会让运放饱和2、在闭环的深度反馈电路中。
- printm matlab,求助:将matlab M文件编译成DLL时出现的问题!
- 旋转行求解联立方程(针对特殊情况).(python,数值分析)
- r7 7735h和r5 5560U差距 锐龙r77735h和r55560U对比
- java的一些技术方案!