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模板的使用方法(图文)
Nov 04 Python
Python返回真假值(True or False)小技巧
Apr 10 Python
Python实现堆排序的方法详解
May 03 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
24式加速你的Python(小结)
Jun 13 Python
你需要学会的8个Python列表技巧
Jun 24 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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的类 功能齐全的发送邮件类
2006/10/09 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
nginx 设置多个站跨域
2021/03/09 Servers
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
pow在python中的含义及用法
2019/07/11 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
企业宣传语大全
2015/07/13 职场文书