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中计算三角函数之cos()方法的使用简介
May 15 Python
Python 正则表达式实现计算器功能
Apr 29 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
matplotlib给子图添加图例的方法
Aug 03 Python
python requests.post带head和body的实例
Jan 02 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
Django values()和value_list()的使用
Mar 31 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python实战之OpenCV实现猫脸检测
Jun 26 Python
python实现Nao机器人的单目测距
Sep 04 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
解决DataFrame排序sort的问题
2018/06/07 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
销售类个人求职信范文
2013/09/25 职场文书
投标承诺书怎么写
2014/05/24 职场文书
高中生学习计划书
2014/09/15 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2016小学新学期寄语
2015/12/04 职场文书