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改变日志(logging)存放位置的示例
Mar 27 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
python numpy 部分排序 寻找最大的前几个数的方法
Jun 27 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
Django 5种类型Session使用方法解析
Apr 29 Python
浅析Python 多行匹配模式
Jul 24 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
总结python 三种常见的内存泄漏场景
Nov 20 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
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
php加密解密字符串示例
2016/10/13 PHP
php显示页码分页类的封装
2017/06/08 PHP
广告显示判断
2006/08/31 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
工商企业管理实习自我鉴定
2013/12/04 职场文书
体育专业个人求职信范文
2013/12/27 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
教师个人鉴定材料
2014/02/08 职场文书
毕业自我鉴定书
2014/03/24 职场文书
婚内分居协议书范文
2014/11/26 职场文书
社区活动总结
2015/02/04 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书