基于PyQt5的简易计算器

4 篇文章 1 订阅

基于PyQt5的简易计算器之三

提示:基于PyQt5的简易计算器之一为环境搭建
基于PyQt5的简易计算器之一为环境搭建
基于PyQt5的简易计算器之二为Qt Designer使用
基于PyQt5的简易计算器之三为pycharm中实现按键的功能



import 部分

import sys 
# 导入系统,不用对其pip安装
from PyQt5.QtWidgets import QApplication,QWidget 
# 需要pip安装 PyQt5,已在基于PyQt5的简易计算器之一 环境的搭建中实现
from CalcuInterface import Ui_widget 
# 用户自己定义的,为ui转为py文件中的类,已在基于PyQt5的简易计算器之二 Qt Designer 中实现
from PyQt5.QtGui import  QIcon
# 用于加入软件独特的logo

一、创建类

class QmyWidget(QWidget):

# QmyWidget为创建的类名称,可以修改。

二、初始化定义

  def __init__(self,parent = None):  # ==注意init前后两个短线 _ _==
        # 从文件中加载UI定义
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        super().__init__(parent) # 调用父类构造函数,创建QtWidget窗口
        self.label_text = ''  # 定义一个变量,用于存放运算方程
        self.edit_text = ''   # 定义一个变量,用于按键输入的数值和运算符号
        self.num1 = ''        # 定义一个变量,用于存放输入的第一个数
        self.num2 = ''
        self.opt = ''		  # 定义一个变量,用于存放运算符
        self.result = ''	  # 定义一个变量,用于存放运算结果
        self.__ui = Ui_widget() # 创建UI对象
        self.__ui.setupUi(self)  # 创建UI界面
        self.__ui.lineEdit_op.setText('0') #编辑框lineEdit_op初始化,第二个框名称lineEdit_op
        self.__ui.display.setText('0') #结果显示框display初始化,第一个框名称display

三、数字0-9

以3 为例

    def on_three_pressed(self):  # three为按键3 的名称,如之二图中定义按键的名称
        self.label_text += '3'
		# 存放所有的输入,包括此时的输入:3
        if(self.opt == ''): # 若没有输入运算符,则给第一个数值后面
            self.num1 += '3'
            self.edit_text = self.num1 # 将数值1给变量edit_text,为后面在第二个框中显示做铺垫
        else:
            self.num2 += '3' # 若有运算符,则将3 给第二个数值后面
            self.edit_text = self.num2  #  同理
        self.__ui.lineEdit_op.setText(self.edit_text)  # 将输入的数值,显示在第二个框中
        self.__ui.display.setText(self.label_text)	   #将所有的输入,显示在第一个框中

其他数值类似。

四、点

点的功能和数字相似,因此写在这个地方

    def on_point_pressed(self):
        self.label_text += '.'
		# 存放所有的输入,包括此时的输入:3
        if(self.opt == ''): # 若没有输入运算符,则给第一个数值后面
            self.num1 += '.'
            self.edit_text = self.num1 # 将数值1给变量edit_text,为后面在第二个框中显示做铺垫
        else:
            self.num2 += '.'  # 若有运算符,则将3 给第二个数值后面
            self.edit_text = self.num2  #  同理
        self.__ui.lineEdit_op.setText(self.edit_text)  # 将输入的数值,显示在第二个框中
        self.__ui.display.setText(self.label_text)	   #将所有的输入,显示在第一个框中

四、加减乘除

以加为例

    def on_add_pressed(self):
        if (self.num1 == '' or self.opt !=''): # 若第一个数为空,或运算符为空,点击运算符失效
            pass
        else: # 否则
            self.label_text +='+' # 第一个显示屏的变量继续储存
            self.opt = '+'        # 运算符储存 +
            self.__ui.display.setText(self.label_text) # 第一个显示屏显示输入的“第一个数+”的内容,第二个框不做变化,还是第一个数值。

其他类似


五、 等于

    def on_equal_pressed(self):
        if (self.num2 == ''):  # 没有两个数时,等号无效
            pass
        else:
            if(self.opt == '+'):
                self.result = str(float(self.num1) + float(self.num2))
            elif (self.opt == '-'):
                self.result = str(float(self.num1) - float(self.num2))
            elif (self.opt == '×'):
                self.result = str(float(self.num1) * float(self.num2))
            elif (self.opt == '÷'):
                self.result = str(float(self.num1) / float(self.num2))

            self.label_text = self.label_text + '=' +self.result # 将等于号和等于结果给第一个框的变量
            self.edit_text = self.result  # 将结果给第二个框的变量
            self.__ui.lineEdit_op.setText(self.edit_text)  # 在第二个框中显示结果
            self.__ui.display.setText(self.label_text) # 在第一个框中显示方程

# 对以上五个变量初始化。清空所有值。
            self.label_text = ''
            self.edit_text = ''
            self.num1 = ''
            self.num2 = ''
            self.opt = ''
            self.result = ''

六、 清除命令

清除命令较为简单,即等于后面的初始化+ 两个显示屏的清除

   def on_clearall_pressed(self):
        self.__ui.lineEdit_op.clear() # 第二个显示屏的清除
        self.__ui.display.clear()     # 第一个显示屏的清除
        self.label_text = ''
        self.edit_text = ''
        self.num1 = ''
        self.num2 = ''
        self.opt = ''
        self.result = ''

七、 退格命令

输错了,消除掉此次输入错误的一步

#退格
    def on_remove_pressed(self):
        if(self.opt == ''): # 若运算符没有输入时,即第一个数值
            self.num1 = self.num1[0:-1] # 字符串的切片,最后一个字符不要了
            self.edit_text = self.num1  # 修改此时的第二个框的内容
            self.label_text = self.num1 # 修改此时的第一个框的内容

        elif (self.opt != '' and self.num2 == '' ): # 若运算符输入,第二个数值没有输入时,即运算符
            self.opt = ''  # 将运算符清空
            self.label_text = self.label_text[0:-1] # 将第一个框的变量中去掉运算符
        elif(self.num2 != ''): # 若第二个数值不为空,即对第二个数值操作
            self.num2 = self.num2[0:-1]   # 第二个数的字符串最后一个字符不要了
            self.edit_text = self.edit_text[0:-1] # 第二个显示屏的字符串最后一个字符不要了
            self.label_text = self.label_text[0:-1] # 第一个数的字符串最后一个字符不要了
        self.__ui.lineEdit_op.setText(self.edit_text) # 第一个显示屏显示
        self.__ui.display.setText(self.label_text) # 第二个显示屏显示

八、 主程序

以下为固定格式,可以改变的为

  1. QmyWidget(),此类为以上文件定义的类名成。
  2. app.setWindowIcon(QIcon(‘logo.png’)) 可以去掉,用于软件运行时,左上角的logo. 图片随便找个就行。
if __name__ == "__main__":  #固定格式
    app = QApplication(sys.argv)
    # 加载
    app.setWindowIcon(QIcon('logo.png'))

    myWidget = QmyWidget()
    myWidget.show()
    sys.exit(app.exec_())


九、 完整的py文件


import sys
from PyQt5.QtWidgets import QApplication,QWidget
from CalcuInterface import Ui_widget
from PyQt5.QtGui import  QIcon

class QmyWidget(QWidget):
    def __init__(self,parent = None):
        # 从文件中加载UI定义
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        super().__init__(parent) # 调用父类构造函数,创建QtWidget窗口
        self.label_text = ''
        self.edit_text = ''
        self.num1 = ''
        self.num2 = ''
        self.opt = ''
        self.result = ''
        self.__ui = Ui_widget() # 创建UI对象
        self.__ui.setupUi(self)  # 创建UI界面
        self.__ui.lineEdit_op.setText('0') #编辑框lineEdit_op初始化
        self.__ui.display.setText('0') #结果显示框display初始化
#  数字0-9
    def on_zero_pressed(self):  # zero是0的按键名
        self.label_text += '0'

        if(self.opt == ''):
            self.num1 += '0'
            self.edit_text = self.num1
        else:
            self.num2 += '0'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_one_pressed(self):
        self.label_text += '1'

        if(self.opt == ''):
            self.num1 += '1'
            self.edit_text = self.num1
        else:
            self.num2 += '1'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_two_pressed(self):
        self.label_text += '2'

        if(self.opt == ''):
            self.num1 += '2'
            self.edit_text = self.num1
        else:
            self.num2 += '2'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_three_pressed(self):
        self.label_text += '3'

        if(self.opt == ''):
            self.num1 += '3'
            self.edit_text = self.num1
        else:
            self.num2 += '3'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_four_pressed(self):
        self.label_text += '4'

        if(self.opt == ''):
            self.num1 += '4'
            self.edit_text = self.num1
        else:
            self.num2 += '4'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_five_pressed(self):
        self.label_text += '5'

        if(self.opt == ''):
            self.num1 += '5'
            self.edit_text = self.num1
        else:
            self.num2 += '5'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_six_pressed(self):
        self.label_text += '6'

        if(self.opt == ''):
            self.num1 += '6'
            self.edit_text = self.num1
        else:
            self.num2 += '6'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_seven_pressed(self):
        self.label_text += '7'

        if(self.opt == ''):
            self.num1 += '7'
            self.edit_text = self.num1
        else:
            self.num2 += '7'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_eight_pressed(self):
        self.label_text += '8'

        if(self.opt == ''):
            self.num1 += '8'
            self.edit_text = self.num1
        else:
            self.num2 += '8'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    def on_nine_pressed(self):
        self.label_text += '9'

        if(self.opt == ''):
            self.num1 += '9'
            self.edit_text = self.num1
        else:
            self.num2 += '9'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)
    # 附加功能:点号
    def on_point_pressed(self):
        self.label_text += '.'
        if(self.opt == ''):
            self.num1 += '.'
            self.edit_text = self.num1
        else:
            self.num2 += '.'
            self.edit_text = self.num2
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)

    # 加减乘除
    def on_add_pressed(self):
        if (self.num1 == '' or self.opt !=''):
            pass
        else:
            self.label_text +='+'
            self.opt = '+'
            self.__ui.display.setText(self.label_text)

    def on_subtract_pressed(self):
        if (self.num1 == '' or self.opt !=''):
            pass
        else:
            self.label_text +='-'
            self.opt = '-'
            self.__ui.display.setText(self.label_text)

    def on_multiply_pressed(self):
        if (self.num1 == '' or self.opt !=''):
            pass
        else:
            self.label_text +='×'
            self.opt = '×'
            self.__ui.display.setText(self.label_text)

    def on_divid_pressed(self):
        if (self.num1 == '' or self.opt !=''):
            pass
        else:
            self.label_text +='÷'
            self.opt = '÷'
            self.__ui.display.setText(self.label_text)

    # 等于
    def on_equal_pressed(self):
        if (self.num2 == ''):  # 没有两个数时,等号无效
            pass
        else:
            if(self.opt == '+'):
                self.result = str(float(self.num1) + float(self.num2))
            elif (self.opt == '-'):
                self.result = str(float(self.num1) - float(self.num2))
            elif (self.opt == '×'):
                self.result = str(float(self.num1) * float(self.num2))
            elif (self.opt == '÷'):
                self.result = str(float(self.num1) / float(self.num2))

            self.label_text = self.label_text + '=' +self.result
            self.edit_text = self.result
            self.__ui.lineEdit_op.setText(self.edit_text)
            self.__ui.display.setText(self.label_text)
            self.label_text = ''
            self.edit_text = ''
            self.num1 = ''
            self.num2 = ''
            self.opt = ''
            self.result = ''

    # 清除命令
    def on_clearall_pressed(self):
        self.__ui.lineEdit_op.clear()
        self.__ui.display.clear()
        self.label_text = ''
        self.edit_text = ''
        self.num1 = ''
        self.num2 = ''
        self.opt = ''
        self.result = ''

#退格
    def on_remove_pressed(self):
        if(self.opt == ''):
            self.num1 = self.num1[0:-1]
            self.edit_text = self.num1
            self.label_text = self.num1
        elif (self.opt != '' and self.num2 == '' ):
            self.opt = ''
            self.label_text = self.label_text[0:-1]
        elif(self.num2 != ''):
            self.num2 = self.num2[0:-1]
            self.edit_text = self.edit_text[0:-1]
            self.label_text = self.label_text[0:-1]
        self.__ui.lineEdit_op.setText(self.edit_text)
        self.__ui.display.setText(self.label_text)
# 括弧
#     def on_brackets_left_pressed(self):

if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 加载
    app.setWindowIcon(QIcon('logo.png'))

    myWidget = QmyWidget()
    myWidget.show()
    sys.exit(app.exec_())

总结

提示:这里对文章进行总结:

以上就是今天要讲的内容,本文将按键的功能如何实现进行了介绍。以下将对软件的发布进行介绍。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt是一个用Python语言开发的开源库,它提供了丰富的图形界面组件和功能,适用于开发各种桌面应用程序。而深度学习分类是一种机器学习的技术,它将深度神经网络应用于分类任务中。 要实现深度学习分类软件开发,可以使用PyQt结合深度学习库(如TensorFlow、PyTorch)来完成。以下是一般开发流程: 1. 界面设计:使用PyQt的图形界面设计工具(Qt Designer)创建软件界面,包括按钮、文本框、图像显示等组件,并设置相应的布局。 2. 数据准备:准备用于训练和测试的数据集。可以从已有的数据集中读取数据,并进行预处理,例如图像的尺寸调整、数据的标准化等。 3. 深度学习模型设计:选择适合分类任务的深度学习模型,可以是传统的卷积神经网络(CNN)或更复杂的模型(如ResNet、VGG),并使用深度学习库来搭建网络结构。 4. 模型训练:将准备好的数据集输入到深度学习模型中,并使用训练算法对模型进行训练。可以设置训练的参数,如学习率、批大小、迭代次数等。 5. 模型评估:使用测试数据对训练好的模型进行评估,计算出分类准确率等指标,判断模型的性能。 6. 软件集成:将深度学习模型集成到PyQt的界面中,通过设置按钮事件等方式实现图像的输入和预测输出。 7. 用户交互:通过PyQt提供的界面组件和功能,实现用户与软件的交互,例如选择图片、预测图像分类等。 8. 软件调试和优化:对软件进行调试,验证是否符合预期功能。根据实际需要,可以对模型进行优化,改进软件的性能。 通过以上步骤,利用PyQt实现深度学习分类软件开发就可以实现。这样开发出的软件可以提供一个用户友好的界面,使用户可以方便地输入数据进行分类预测,提高深度学习模型的应用效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值