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中Django框架利用url来控制登录的方法
Jul 25 Python
python如何通过protobuf实现rpc
Mar 06 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Python将图片转换为字符画的方法
Jun 16 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
python中图像通道分离与合并实例
Jan 17 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
Python爬虫与反爬虫大战
Jul 30 Python
Restful_framework视图组件代码实例解析
Nov 17 Python
Elasticsearch 基本查询和组合查询
Apr 19 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如何将日志写进syslog
2013/06/28 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
超简单的jquery的AJAX用法
2010/05/10 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
python实现简单成绩录入系统
2019/09/19 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
建筑总经理岗位职责
2014/02/02 职场文书
颁奖典礼主持词
2014/03/25 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
社区春季防火方案
2014/06/02 职场文书
员工薪酬激励方案
2014/06/13 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
环境卫生整治简报
2015/07/20 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
SQL Server中锁的用法
2022/05/20 SQL Server