目录
一、环境配置:
二、代码实现
三、主程序
四、总结
本文使用PyQt5设计一款简单的计算器,可以通过界面交互实现加减乘除的功能,希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。
具体界面如下:
一、环境配置:
使用pip指令安装pyqt5,此处选择5.12.0版本,因为笔者安装的spyder版本为4.1.5,过高的版本不兼容:
pip install PyQt5==5.12.0 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simple
pip install PyQt5designer -i https://pypi.douban.com/simple
二、代码实现
1、引入依赖库。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, QPushButton
from PyQt5.QtCore import Qt
2、定义计算器(Calculator)类,成员函数的功能如下表所示。
函数名称 | 函数功能 |
__init__() | 初始化函数,初始化窗口名称、尺寸、按钮名称、位置、信号响应函数等。 |
button_click(self, number) | 选择数字与小数点 |
button_clear(self) | 实现屏幕以及缓存清空的功能 |
button_add(self) | 实现两个数相加的功能 |
button_subtract(self) | 实现两个数相减的功能 |
button_multiply(self) | 实现两个数相乘的功能 |
button_divide(self) | 实现两个数相除的功能 |
button_equal(self) | 首先判断执行的运算操作,调用对应的函数进行计算,并将结果显示在文本框中 |
class Calculator(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("计算器")
self.setFixedSize(300, 350) # 固定窗口大小
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
main_layout = QGridLayout()
central_widget.setLayout(main_layout)
# 添加文本框
self.screen = QLineEdit()
self.screen.setFixedHeight(40)
self.screen.setAlignment(Qt.AlignRight)
self.screen.setReadOnly(True)
main_layout.addWidget(self.screen, 0, 0, 1, 4)
# 添加按钮
button_1 = QPushButton("1", clicked=lambda: self.button_click("1"))
button_2 = QPushButton("2", clicked=lambda: self.button_click("2"))
button_3 = QPushButton("3", clicked=lambda: self.button_click("3"))
button_4 = QPushButton("4", clicked=lambda: self.button_click("4"))
button_5 = QPushButton("5", clicked=lambda: self.button_click("5"))
button_6 = QPushButton("6", clicked=lambda: self.button_click("6"))
button_7 = QPushButton("7", clicked=lambda: self.button_click("7"))
button_8 = QPushButton("8", clicked=lambda: self.button_click("8"))
button_9 = QPushButton("9", clicked=lambda: self.button_click("9"))
button_0 = QPushButton("0", clicked=lambda: self.button_click("0"))
button_add = QPushButton("+", clicked=self.button_add)
button_subtract = QPushButton("-", clicked=self.button_subtract)
button_multiply = QPushButton("*", clicked=self.button_multiply)
button_divide = QPushButton("/", clicked=self.button_divide)
button_clear = QPushButton("清除", clicked=self.button_clear)
button_equal = QPushButton("=", clicked=self.button_equal)
main_layout.addWidget(button_7, 1, 0)
main_layout.addWidget(button_8, 1, 1)
main_layout.addWidget(button_9, 1, 2)
main_layout.addWidget(button_divide, 1, 3)
main_layout.addWidget(button_4, 2, 0)
main_layout.addWidget(button_5, 2, 1)
main_layout.addWidget(button_6, 2, 2)
main_layout.addWidget(button_multiply, 2, 3)
main_layout.addWidget(button_1, 3, 0)
main_layout.addWidget(button_2, 3, 1)
main_layout.addWidget(button_3, 3, 2)
main_layout.addWidget(button_subtract, 3, 3)
main_layout.addWidget(button_0, 4, 0)
main_layout.addWidget(button_clear, 4, 1, 1, 2)
main_layout.addWidget(button_add, 4, 3)
main_layout.addWidget(button_equal, 5, 0, 1, 4)
# 初始化变量
self.first_num = None
self.operation = None
def button_click(self, number):
current = self.screen.text()
self.screen.setText(current + number)
def button_clear(self):
self.screen.clear()
self.first_num = None
self.operation = None
def button_add(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "add"
def button_subtract(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "subtract"
def button_multiply(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "multiply"
def button_divide(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "divide"
def button_equal(self):
second_num = float(self.screen.text())
self.screen.clear()
if self.operation == "add":
result = self.first_num + second_num
elif self.operation == "subtract":
result = self.first_num - second_num
elif self.operation == "multiply":
result = self.first_num * second_num
elif self.operation == "divide":
if second_num == 0:
result = "除数不能为 0"
else:
result = self.first_num / second_num
self.screen.setText(str(result))
三、主程序
主程序首先创建窗口对象,接着创建计算器对象并显示窗口,最后设定终止条件。
if __name__ == "__main__":
app = QApplication(sys.argv)
calc = Calculator()
calc.show()
sys.exit(app.exec_())
四、总结
这个计算器的优点:
- 采用了PyQt5模块和Python语言进行设计,实现较为简单,易于理解和修改。
- 可以进行基本运算操作,包括加、减、乘、除等。
这个计算器的缺点:
- 功能较为简单,只能进行基础的数学运算,无任何高级功能。
- 输入输出仅支持数字和基本的加减乘除运算符号,不支持其他字符、函数或变量。
- 在除数为0时无法做出错误提示,故看起来好像可以除以0一样。
综上所述,该计算器适合作为一个小型的实验项目或界面设计入门示例,但是并不够强大,不能满足更多复杂应用场景的需求。