使用PyQt5设计一款简单的计算器

目录

一、环境配置:

二、代码实现

三、主程序

四、总结


        本文使用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一样。

综上所述,该计算器适合作为一个小型的实验项目或界面设计入门示例,但是并不够强大,不能满足更多复杂应用场景的需求。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的仰望者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值