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远程桌面协议RDPY安装使用介绍
Apr 15 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python编程中用close()方法关闭文件的教程
May 24 Python
Python做简单的字符串匹配详解
Mar 21 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
python实现根据文件格式分类
Oct 31 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Jupyter安装链接aconda实现过程图解
Nov 02 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基础之运算符的使用方法
2013/04/28 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
php基础教程
2015/08/26 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
详解Python3的TFTP文件传输
2018/06/26 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
安全生产汇报材料
2014/02/17 职场文书
岗位廉政承诺书
2014/03/27 职场文书
教师求职信
2014/06/17 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
小学中队委竞选稿
2015/11/20 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫