Python PyQt5实现的简易计算器功能示例


Posted in Python onAugust 23, 2017

本文实例讲述了Python PyQt5实现的简易计算器功能。分享给大家供大家参考,具体如下:

这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它

【知识点】

1、利用循环添加按钮部件,及给每个按钮设置信号/槽
2、给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30))
3、取事件的的发送者(此例为各个按钮)的文本: self.sender().text()

【效果图】

Python PyQt5实现的简易计算器功能示例

【源代码】

import sys
from PyQt5 import QtWidgets,QtCore,QtGui
class Example(QtWidgets.QWidget):
 def __init__(self):
  super(Example, self).__init__()
  self.initUI()
  self.reset()
 def initUI(self):
  self.setWindowTitle('简易计算器')
  grid = QtWidgets.QGridLayout()
  self.display = QtWidgets.QLineEdit('0')
  self.display.setFont(QtGui.QFont("Times", 20))
  self.display.setReadOnly(True)
  self.display.setAlignment(QtCore.Qt.AlignRight)
  self.display.setMaxLength(15)
  grid.addWidget(self.display,0,0,1,4)
  names = ['Clear', 'Back', '', 'Close', 
    '7', '8', '9', '/',
    '4', '5', '6', '*', 
    '1', '2', '3', '-',
    '0', '.', '=', '+']
  pos = [(0, 0), (0, 1), (0, 2), (0, 3),
    (1, 0), (1, 1), (1, 2), (1, 3),
    (2, 0), (2, 1), (2, 2), (2, 3),
    (3, 0), (3, 1), (3, 2), (3, 3 ),
    (4, 0), (4, 1), (4, 2), (4, 3)]
  c = 0
  for name in names:
   button = QtWidgets.QPushButton(name)
   button.setFixedSize(QtCore.QSize(60,30))
   button.clicked.connect(self.buttonClicked) # 给每个按钮设置信号/槽
   if c == 2:
    pass
    #grid.addWidget(QtWidgets.QLabel(''), 0, 2) #替换 第三个按钮 为 文本标签!
   else: 
    grid.addWidget(button, pos[c][0]+1, pos[c][1])
   c = c + 1
  self.setLayout(grid)
 def buttonClicked(self): 
  #sender = self.sender(); # 确定信号发送者
  #self.display.setText(sender.text())
  text = self.sender().text()
  if text in '+-*/':
   self.history.append(self.number) # 数字入栈
   self.history.append(text) # 运算符入栈
   self.operator = text # 设置当前运算符
   self.number = "" # 数字清空
   self.numberType = "int"
   return
  elif text == "=":
   self.calculate() # 计算
  elif text == "Back":
   pass
  elif text == "Clear":
   self.reset()
  elif text == "Close":
   self.close()
  elif text == ".":
   if self.numberType == "int":
    self.number += text
    self.numberType = "float"
  else:
   self.number = self.number + text if self.number != "0" else text
  self.display.setText(self.number)
 def calculate(self):
  pass
 def reset(self):
  self.number = "0"
  self.result = 0
  self.history = []
  self.operator = '' # +,-,*,/
  self.numberType = 'int' # int与float两种,如果输入了小数点则为实数
app = QtWidgets.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:
http://tools.3water.com/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.3water.com/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.3water.com/jisuanqi/jsq

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python正则表达式的使用范例详解
Aug 08 Python
小小聊天室Python代码实现
Aug 17 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
对Python w和w+权限的区别详解
Jan 23 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
python判断是空的实例分享
Jul 06 Python
python Paramiko使用示例
Sep 21 Python
五种Python转义表示法
Nov 27 Python
Pandas之缺失数据的实现
Jan 06 Python
Python实现的密码强度检测器示例
Aug 23 #Python
python+selenium+autoit实现文件上传功能
Aug 23 #Python
Django与JS交互的示例代码
Aug 23 #Python
python paramiko模块学习分享
Aug 23 #Python
定制FileField中的上传文件名称实例
Aug 23 #Python
基于python元祖与字典与集合的粗浅认识
Aug 23 #Python
Python 多线程Threading初学教程
Aug 22 #Python
You might like
PHP STRING 陷阱原理说明
2010/07/24 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
javascript模块化简单解析
2016/04/07 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
js数据类型检测总结
2018/08/05 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python类继承用法实例分析
2015/05/27 Python
matplotlib中legend位置调整解析
2017/12/19 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
对祖国的寄语大全
2014/04/11 职场文书
产品开发计划书
2014/04/27 职场文书
成绩报告单家长评语
2014/12/30 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
营运督导岗位职责
2015/04/10 职场文书
2015中学教学工作总结
2015/07/22 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
一文搞懂php的垃圾回收机制
2021/06/18 PHP