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中的Matplotlib模块入门教程
Apr 15 Python
python下MySQLdb用法实例分析
Jun 08 Python
python实时监控cpu小工具
Jun 21 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
Python数据类型之Dict字典实例详解
May 07 Python
感知器基础原理及python实现过程详解
Sep 30 Python
python小项目之五子棋游戏
Dec 26 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
python 中的@运算符使用
May 26 Python
常用的Python代码调试工具总结
Jun 23 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
关于js与php互相传值的介绍
2013/06/25 PHP
PHP count()函数讲解
2019/02/03 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
使用python绘制常用的图表
2016/08/27 Python
Python实现自动上京东抢手机
2018/02/06 Python
有关Python的22个编程技巧
2018/08/29 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
PHP经典面试题
2016/09/03 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
同事打架检讨书
2014/02/04 职场文书
安全责任协议书
2014/04/21 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
python_tkinter事件类型详情
2022/03/20 Python
python实现简单的三子棋游戏
2022/04/28 Python