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使用wxPython打开并播放wav文件的方法
Apr 24 Python
详解Python的Django框架中的通用视图
May 04 Python
Python求导数的方法
May 09 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Django正则URL匹配实现流程解析
Nov 13 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
sql注入与转义的php函数代码
2013/06/17 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python中dir函数用法分析
2015/04/17 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
详解python中asyncio模块
2018/03/03 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
基于Python解密仿射密码
2019/10/21 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
python中二分查找法的实现方法
2020/12/06 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
男方父母婚礼答谢词
2014/01/25 职场文书
服务员岗位责任制
2014/02/11 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Python制作春联的示例代码
2022/01/22 Python
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server