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中map、any、all函数用法分析
Apr 21 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
python读写文件write和flush的实现方式
Feb 21 Python
基于python生成英文版词云图代码实例
May 16 Python
Python新手学习装饰器
Jun 04 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
python实现简单贪吃蛇游戏
Sep 29 Python
Python可视化工具如何实现动态图表
Oct 23 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
详解分布式系统中如何用python实现Paxos
May 18 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP&MYSQL服务器配置说明
2006/10/09 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python断言assert的用法代码解析
2018/02/03 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
小学班主任工作随笔
2015/08/15 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
正则表达式基础与常用验证表达式
2022/06/16 Javascript
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers