python GUI计算器的实现


Posted in Python onOctober 09, 2020

01 实现

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

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

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

看一下效果:

python GUI计算器的实现

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

# 自动刷新字符串变量,可用 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)

看一下效果:

python GUI计算器的实现

再接着画键盘,代码实现如下:

# 按钮显示内容
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)

看一下效果:

python GUI计算器的实现

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

# 点击事件
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 GUI计算器的实现

是不是有内味了。

02 打包

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

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

如下图所示:

python GUI计算器的实现

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

03 总结

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

以上就是python GUI计算器的实现的详细内容,更多关于python 计算器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
python冒泡排序简单实现方法
Jul 09 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
python设置值及NaN值处理方法
Jul 03 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
python中doctest库实例用法
Dec 31 Python
python基础之匿名函数详解
Apr 21 Python
Python 可迭代对象 iterable的具体使用
Aug 07 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 #Python
Python使用socket_TCP实现小文件下载功能
Oct 09 #Python
python实现逻辑回归的示例
Oct 09 #Python
Django生成数据库及添加用户报错解决方案
Oct 09 #Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 #Python
python实现数据结构中双向循环链表操作的示例
Oct 09 #Python
Python collections模块的使用方法
Oct 09 #Python
You might like
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
总结js函数相关知识点
2018/02/27 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python Pillow Image Invert
2019/01/22 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
python如何处理程序无法打开
2020/06/16 Python
自我鉴定书范文
2013/10/02 职场文书
三查三看党性分析材料
2014/02/18 职场文书
建设工地安全标语
2014/06/07 职场文书
小学运动会演讲稿
2014/08/25 职场文书
预备党员表决心的话
2015/09/22 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
python运算符之与用户交互
2022/04/13 Python