PyQt5 简易计算器

简介: 剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它   【知识点】 1、利用循环添加按钮部件,及给每个按钮设置信号/槽 2、给按钮设置固定大小:button.setFixedSize(QtCore.

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

 

目录
相关文章
|
存储 API 虚拟化
|
5月前
|
存储 JSON Java
深入理解 JWT 中 Claims 的设计及其合理性
JWT(JSON Web Token)中 Claims 是存储用户或业务信息的关键部分。JJWT 库通过 `setClaims` 方法支持传入 `Map<String, Object>` 或 `Claims` 对象,确保灵活性与高效性。本文从源码角度剖析 JWT Claims 的设计思想,介绍三种实现方式:使用 `HashMap`、`DefaultClaims` 和逐个添加声明,并分析其合理性。这种基于 Map 的设计符合 JSON 格式特性,易于扩展且性能优越,为开发者提供灵活的选择,满足不同业务需求。
277 2
|
11月前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
12月前
|
Unix Go
go语言获取当前时间戳
go语言获取当前时间戳
|
11月前
|
存储 分布式计算 负载均衡
|
算法 数据处理 开发工具
Android平台RTSP|RTMP播放器如何回调YUV或RGB数据
在开发Android平台上的RTSP或RTMP播放器时,开发者不仅追求低延迟播放,还希望获取解码后的视频数据(如YUV或RGB格式),以便进行视觉算法分析。使用大牛直播SDK中的SmartPlayer,可在确保播放流畅的同时,通过设置外部渲染器(`SmartPlayerSetExternalRender`)来高效地回调原始视频数据。例如,对于RGBA数据,需实现`NTExternalRender`接口,并重写相关方法以处理数据和尺寸变化。同样地,对于I420(YUV)数据,也需要相应地实现接口以满足需求。这种方式使得开发者能在不影响常规播放功能的情况下,进行定制化的视频处理任务。
163 1
|
弹性计算 运维 负载均衡
【阿里云弹性计算】阿里云ECS在金融科技中的应用案例:高性能交易系统的构建
【5月更文挑战第27天】阿里云ECS助力某证券公司构建高性能交易系统,满足高并发、高可用和弹性扩展需求。ECS凭借最新处理器技术、高速内存实现高性能计算;支持多地域、多可用区部署保证高可用性;弹性伸缩特性适应业务波动,降低运维成本。通过分布式架构和负载均衡技术,实现交易请求高效处理,确保系统稳定运行。案例证明,阿里云ECS是金融科技领域构建高性能交易系统的理想选择。
400 1
|
分布式计算 安全 网络协议
centos7下 FTP服务器的配置,以及配置ftp支持ftps
FTP [File Transfer PRocotol]主要用于在服务器与客户端之间进行文件传输
centos7下 FTP服务器的配置,以及配置ftp支持ftps
|
SQL 搜索推荐 数据挖掘
Quick BI产品核心功能大图(二):即席分析
“授人以鱼不如授人以渔”!Quick BI的即席分析,提供灵活的数据分析能力,随时取数、随时分析。 在IT支撑,提供标准元数据,以及由组织管理员完善行级权限管控的基础之上,业务人员能够借助即席分析提成本的通过拖拽,零SQL的进行分析和取数,降低对BI分析师的依赖,最终实现数据分析和业务决策的提效。
800 0
|
XML 分布式计算 算法
Rosetta | Rosetta简介
Rosetta | Rosetta简介
1139 0
Rosetta | Rosetta简介