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模拟登陆Tom邮箱示例分享
Jan 13 Python
Python计算三维矢量幅度的方法
Jun 15 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
python中的字典使用分享
Jul 31 Python
使用Python读取大文件的方法
Feb 11 Python
python用插值法绘制平滑曲线
Feb 19 Python
解决python线程卡死的问题
Feb 18 Python
python求平均数、方差、中位数的例子
Aug 22 Python
python实现简单的购物程序代码实例
Mar 03 Python
python os.listdir()乱码解决方案
Jan 31 Python
Python Django ORM连表正反操作技巧
Jun 13 Python
django中websocket的具体使用
Jan 22 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/11/16 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
js实现数组转换成json
2015/06/26 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
Python全局变量用法实例分析
2016/07/19 Python
Python随机数random模块使用指南
2016/09/09 Python
python中的变量如何开辟内存
2018/06/26 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
大型演出策划方案
2014/05/28 职场文书
写字楼租赁意向书
2014/07/30 职场文书
社团活动总结格式
2014/08/29 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle