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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
python 格式化输出百分号的方法
Jan 20 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
python适合人工智能的理由和优势
Jun 28 Python
python 3.6.7实现端口扫描器
Sep 04 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python脚本和网页有何区别
Jul 02 Python
Python进行统计建模
Aug 10 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 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中http_build_query 的一个问题
2012/03/25 PHP
关于Laravel-admin的基础用法总结和自定义model详解
2019/10/08 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
自己动手开发jQuery插件教程
2011/08/25 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python面试题小结附答案实例代码
2019/04/11 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
Python reques接口测试框架实现代码
2020/07/28 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
会计演讲稿范文
2014/05/23 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android