Python制作简易计算器(PyQt5)

Posted thloveyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python制作简易计算器(PyQt5)相关的知识,希望对你有一定的参考价值。

工具

使用PyQt5,QtDegsiner完成的计算器

还有部分问题未处理。

体验

使用 pip install pyqt5,安装pyqt5后,运行脚本即可即可

应用截图

技术图片技术图片

技术图片

核心部分代码:事件绑定,运算处理

    def event_strigger(self):
        self.pushButton.clicked.connect(lambda: self.clickButton(self.pushButton))
        self.pushButton_2.clicked.connect(lambda: self.clickButton(self.pushButton_2))
        self.pushButton_3.clicked.connect(lambda: self.clickButton(self.pushButton_3))
        self.pushButton_4.clicked.connect(lambda: self.clickButton(self.pushButton_4))
        self.pushButton_5.clicked.connect(lambda: self.clickButton(self.pushButton_5))
        self.pushButton_6.clicked.connect(lambda: self.clickButton(self.pushButton_6))
        self.pushButton_7.clicked.connect(lambda: self.clickButton(self.pushButton_7))
        self.pushButton_8.clicked.connect(lambda: self.clickButton(self.pushButton_8))
        self.pushButton_9.clicked.connect(lambda: self.clickButton(self.pushButton_9))
        self.pushButton_10.clicked.connect(lambda: self.clickButton(self.pushButton_10))
        self.pushButton_11.clicked.connect(lambda: self.clickButton(self.pushButton_11))
        self.pushButton_12.clicked.connect(lambda: self.clickButton(self.pushButton_12))
        self.pushButton_13.clicked.connect(lambda: self.clickButton(self.pushButton_13))
        self.pushButton_14.clicked.connect(lambda: self.clickButton(self.pushButton_14))
        self.pushButton_15.clicked.connect(lambda: self.clickButton(self.pushButton_15))
        self.pushButton_16.clicked.connect(lambda: self.clickButton(self.pushButton_16))
        self.pushButton_17.clicked.connect(lambda: self.clickButton(self.pushButton_17))
        self.pushButton_18.clicked.connect(lambda: self.clickButton(self.pushButton_18))
        self.pushButton_19.clicked.connect(lambda: self.clickButton(self.pushButton_19))
        self.pushButton_20.clicked.connect(lambda: self.clickButton(self.pushButton_20))



    # 按钮点击事件
    def clickButton(self, pbt):
        """

        :param pbt: 按钮的对象
        :return:
        """
        pbt_name = pbt.text()
        if pbt_name == "C":
            self.pushButton.setText("AC")
            self.textBrowser.setText("0")
        elif pbt_name == "AC":
            self.textBrowser.toPlainText()
        elif pbt_name == "+/-":
            # 获取到文本框中内容
            last_result = self.textBrowser.toPlainText()
            if last_result[0] != "-":
                after_result = "-" + last_result
                logging.info(after_result)
                self.textBrowser.setText(after_result)

            else:
                # 将结果显示栏获取的内容转换成int
                try:
                    last_result = int(eval(last_result))
                    last_result = str(abs(last_result))
                    self.textBrowser.setText(last_result)
                except Exception as e:
                    logging.error(e)
                    self.textBrowser.setText("错误")

        elif pbt_name == "%":
            last_result = self.textBrowser.toPlainText()
            # 判断最后一位为运算符时,去百分数
            if last_result[-1] not in ["/", "+", "*", "-"]:
                content = self.textBrowser.toPlainText()
                if eval(content) % 100 == 0:
                    result = eval(content) // 100
                else:
                    result = eval(content) / 100
                self.textBrowser.setText(str(result))
        elif pbt_name == "?":
            self.redundant(self.textBrowser.toPlainText(), "/")
        elif pbt_name == "?":
            self.redundant(self.textBrowser.toPlainText(), "+")
        elif pbt_name == "??":
            self.redundant(self.textBrowser.toPlainText(), "*")
        elif pbt_name == "?":
            self.redundant(self.textBrowser.toPlainText(), "-")
        elif pbt_name == ".":
            # 拿到按下. 直接的字符串
            result = self.textBrowser.toPlainText()
            self.redundant(result, ".")
            # 判断字符串是否含有1个以上.
            if self.textBrowser.toPlainText().count(".") > 1:
                # 如果有设置成最开始的字符串
                self.textBrowser.setText(result)

        elif pbt_name == "=":
            try:
                result = eval(self.textBrowser.toPlainText())
                logging.info("%s,计算结果%s"%(self.textBrowser.toPlainText(), result))
                self.textBrowser.setText(str(result))
            except Exception as e:
                self.textBrowser.setText("发生了错误,请联系管理员!或重试")
                logging.error("Exception", e)
        else:
            if self.textBrowser.toPlainText() == "0" and pbt_name != ".":
                self.textBrowser.setText(pbt_name)
                if pbt_name != "0":
                    self.pushButton.setText("C")
            else:
                last_result = self.textBrowser.toPlainText()
                self.textBrowser.setText(last_result + pbt_name)

    def redundant(self, x, y):
        """
        过滤运算符后直接跟其他类型运算符的情况
        :param x:文本框中当前的字符串
        :param y: 当前输入的按钮
        :return:
        """
        if x[-1] not in ["/", "+", "*", "-"]:
            last_result = x + y
            self.textBrowser.setText(last_result)
            self.pushButton.setText("C")

源代码

以上是关于Python制作简易计算器(PyQt5)的主要内容,如果未能解决你的问题,请参考以下文章

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

python3用pyqt5开发简易浏览器

js代码借助函数eval制作简易计算器

Android Studio 制作简易计算器

用VS制作简易计算器(WPF)

Proteus仿真51单片机制作简易计算器+ LCD1602显示