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处理文本文件并生成指定格式的文件
Jul 31 Python
用Python编写一个国际象棋AI程序
Nov 28 Python
Python实现豆瓣图片下载的方法
May 25 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
pyqt5自定义信号实例解析
Jan 31 Python
python 请求服务器的实现代码(http请求和https请求)
May 25 Python
Python 学习教程之networkx
Apr 15 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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代码
2006/12/06 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
php遍历CSV类实例
2015/04/14 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
Python2.7 实现引入自己写的类方法
2018/04/29 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
python函数的作用域及关键字详解
2019/08/20 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
擅自离岗检讨书
2014/09/12 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015教师年度考核评语
2015/03/25 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python