剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它

【知识点】

1、利用循环添加按钮部件,及给每个按钮设置信号/槽

2、给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30))

3、取事件的的发送者(此例为各个按钮)的文本: self.sender().text()

【效果图】

【源代码】

  1. import sys
  2. from PyQt5 import QtWidgets,QtCore,QtGui
  3.  
  4. class Example(QtWidgets.QWidget):
  5.  
  6. def __init__(self):
  7. super(Example, self).__init__()
  8. self.initUI()
  9.  
  10. self.reset()
  11.  
  12. def initUI(self):
  13. self.setWindowTitle('简易计算器')
  14. grid = QtWidgets.QGridLayout()
  15.  
  16. self.display = QtWidgets.QLineEdit('')
  17. self.display.setFont(QtGui.QFont("Times", 20))
  18. self.display.setReadOnly(True)
  19. self.display.setAlignment(QtCore.Qt.AlignRight)
  20. self.display.setMaxLength(15)
  21. grid.addWidget(self.display,0,0,1,4)
  22.  
  23. names = ['Clear', 'Back', '', 'Close',
  24. '', '', '', '/',
  25. '', '', '', '*',
  26. '', '', '', '-',
  27. '', '.', '=', '+']
  28. pos = [(0, 0), (0, 1), (0, 2), (0, 3),
  29. (1, 0), (1, 1), (1, 2), (1, 3),
  30. (2, 0), (2, 1), (2, 2), (2, 3),
  31. (3, 0), (3, 1), (3, 2), (3, 3 ),
  32. (4, 0), (4, 1), (4, 2), (4, 3)]
  33. c = 0
  34. for name in names:
  35. button = QtWidgets.QPushButton(name)
  36. button.setFixedSize(QtCore.QSize(60,30))
  37. button.clicked.connect(self.buttonClicked) # 给每个按钮设置信号/槽
  38. if c == 2:
  39. pass
  40. #grid.addWidget(QtWidgets.QLabel(''), 0, 2) #替换 第三个按钮 为 文本标签!
  41. else:
  42. grid.addWidget(button, pos[c][0]+1, pos[c][1])
  43. c = c + 1
  44.  
  45. self.setLayout(grid)
  46.  
  47. def buttonClicked(self):
  48. #sender = self.sender(); # 确定信号发送者
  49. #self.display.setText(sender.text())
  50. text = self.sender().text()
  51. if text in '+-*/':
  52. self.history.append(self.number) # 数字入栈
  53. self.history.append(text) # 运算符入栈
  54. self.operator = text # 设置当前运算符
  55. self.number = "" # 数字清空
  56. self.numberType = "int"
  57. return
  58. elif text == "=":
  59. self.calculate() # 计算
  60. elif text == "Back":
  61. pass
  62. elif text == "Clear":
  63. self.reset()
  64. elif text == "Close":
  65. self.close()
  66. elif text == ".":
  67. if self.numberType == "int":
  68. self.number += text
  69. self.numberType = "float"
  70. else:
  71. self.number = self.number + text if self.number != "" else text
  72.  
  73. self.display.setText(self.number)
  74.  
  75. def calculate(self):
  76. pass
  77.  
  78. def reset(self):
  79. self.number = ""
  80. self.result = 0
  81. self.history = []
  82. self.operator = '' # +,-,*,/
  83. self.numberType = 'int' # int与float两种,如果输入了小数点则为实数
  84.  
  85. app = QtWidgets.QApplication(sys.argv)
  86. ex = Example()
  87. ex.show()
  88. sys.exit(app.exec_())

PyQt5 简易计算器的更多相关文章

  1. python + PyQt5 实现 简易计算器

    忽然想起之前一直想写个简单的计算器,今天就写了一下,界面有些简陋,但是基本功能实现没有问题 以下是源码: # --*-- coding:utf-8 --*-- import sys from PyQt ...

  2. 【PyQt5-Qt Designer】简易的数字键盘输入+简易计算器

    参考如下键盘格式写了一个键盘输入,目前还不能进行运算,后期完善... 效果如下: 完整代码: from PyQt5.QtWidgets import (QApplication,QWidget,QPu ...

  3. 自制c#简易计算器

    这是一个课堂作业,我觉得作为一个简易的计算器不需要态度复杂的东西,可能还有一些bug,有空再慢慢加强. using System;using System.Collections.Generic;us ...

  4. 剖析简易计算器带你入门微信小程序开发

    写在前面,但是重点在后面 这是教程,也不是教程. 可以先看Demo的操作动图,看看是个什么玩意儿,GitHub地址(https://github.com/dunizb/wxapp-sCalc) 自从微 ...

  5. PHP学习笔记02——简易计算器

    <!DOCTYPE html> <html> <head> <title>PHP简易计算器</title> </head> &l ...

  6. JavaScript之简易计算器

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  7. 菜鸟学习Struts——简易计算器

    这是学习Struts的一个简单的例子文件结构如下: 1.配置Struts环境 2.新建input.jsp,success.jsp,error.jsp input.jsp代码如下: <%@ pag ...

  8. Python之实现一个简易计算器

    自己动手写计算器 一.功能分析 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里 ...

  9. 使用HTML+CSS,jQuery编写的简易计算器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

随机推荐

  1. deep learning深度学习之学习笔记基于吴恩达coursera课程

    feature study within neural network 在regression问题中,根据房子的size, #bedrooms原始特征可能演算出family size(可住家庭大小), ...

  2. Django之模型注册

    接着上一篇:Django之创建项目 目的:一个空项目创建好了,我们在models.py中新增3张表并在admin界面中显示,并能操作它们. 示例models 编辑models.py # -*- cod ...

  3. Oracle EBS 复制用户职责

    DECLARE l_new_user_name ) := 'HAND_HYL'; l_new_password ) :'; l_new_user_id NUMBER; l_user_name_copy ...

  4. Vue2学习笔记:v-show指令

    v-show指令:v-show="true/false" 控制元素显示/隐藏 1.使用 <!DOCTYPE html> <html> <head> ...

  5. iOS设计模式 - 模板

    iOS设计模式 - 模板 原理图 说明 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 源码 https://github.c ...

  6. Linode VPS主机套餐方案降低处理方法且不影响数据

    使用Linode VPS主机产品经历过512MB内存升级至1GB内存,再升级至2GB内存,以及目前推出1GB内存方案月付10美元.比如我们在使用Linode 2GB内存方案的时候占用资源不是太多,其实 ...

  7. Win7如何设置多用户同时远程登录

    有时候服务器是Win7系统的时候,远程登录桌面时,即使登录的是不同的管理账号,还是会把远程登录的人给记下来.即不同的账号只能同时存在一个会话窗.本文教大家如果设置Win7让两个账号的两会话同时存在,且 ...

  8. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  9. 使用Oracle的instr函数与索引配合提高模糊查询的效率

    使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:1.select * from tb wher ...

  10. 使用ubuntu desktop是可能会用到的配置

    1.ubuntu desktop12.04 接双显示器 想要12.04版本在接上双显示器时能很好的工作,则需要进行如下设置: (1).编辑/etc/X11/xorg.conf文件: /etc/X11/ ...