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爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
python中的格式化输出用法总结
Jul 28 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python Django中models进行模糊查询的示例
Jul 18 Python
Django实现发送邮件找回密码功能
Aug 12 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
python 消除 futureWarning问题的解决
Dec 25 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
如何在django中运行scrapy框架
Apr 22 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 版获取重定向后的地址(代码)
2013/06/26 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
python文件比较示例分享
2014/01/10 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
大学三年的自我评价
2013/12/25 职场文书
门面房租房协议书
2014/08/20 职场文书
紫日观后感
2015/06/05 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL