PyQt6案例3:简单计算器案例

一、用QT设计师绘制界面保存成ui文件

1、打开QTdesigner
2、选择Dialog without Buttons,并单击“创建”按钮。
在这里插入图片描述
3、添加控件。
(1)拖拽“Label”控件,在文本属性中添加文字“请输入第一个数字:”;在Label水平位置拖拽一个“Line Edit”控件。
(2)拖拽“Label”控件,在文本属性中添加文字“请输入第二个额数字:”;在Label水平位置拖拽一个“Line Edit”控件。
(3)拖拽4个“PushButton”控件,在文本属性中分别添加文字“+”、“-”、“*”、“/”。
(4)拖拽“Label”控件,在文本属性中添加文字“结果:3+5=8”。
(5)现在的效果如图:
在这里插入图片描述

二、Qt6样式控制(QSS)

1、右键单击窗体,选择“改变样式表”,修改控件的样式。如下图所示:
在这里插入图片描述
2、在“编辑样式表”中输入下述指令:

*{
	font-size:16px;
	color:rgb(0, 85, 255);
}

颜色选择蓝色,效果如图:
在这里插入图片描述

三、使用布局管理器进行窗体布局

1、选择如图所示控件,点击“水平布局”(快捷键“ctrl+1”),进行水平布局。
在这里插入图片描述
2、选择如图所示控件,点击“水平布局”(快捷键“ctrl+1”),进行水平布局。
在这里插入图片描述
3、选择如图所示控件,点击“水平布局”(快捷键“ctrl+1”),进行水平布局。
在这里插入图片描述
4、选择所有控件,点击“垂直布局”(快捷键“ctrl+2”),进行垂直布局。如图所示
在这里插入图片描述
5、最后的效果如图:
在这里插入图片描述

四、PYQt6信号与槽的处理

1、选择窗体控件,将"objectName"属性变为“SimpleComputer”。
在这里插入图片描述
2、选择窗体控件,将"windowTitle"属性变为“简单计算器”。
在这里插入图片描述
3、选择如图所示控件,将"objectName"属性变为“lineEdit_first”。
在这里插入图片描述
4、选择如图所示控件,将"objectName"属性变为“lineEdit_second”。
在这里插入图片描述
5、选择如图所示控件,将"objectName"属性变为“pushButton_add”。
在这里插入图片描述
6、选择如图所示控件,将"objectName"属性变为“pushButton_sub”。
在这里插入图片描述
7、选择如图所示控件,将"objectName"属性变为“pushButton_mul”。
在这里插入图片描述
8、选择如图所示控件,将"objectName"属性变为“pushButton_divide”。
在这里插入图片描述
9、选择如图所示控件,将"objectName"属性变为“label_result”。
在这里插入图片描述
10、“ctrl+s”保存文件,文件名为“simple_computer.ui”。
11、在anaconda中将“simple_computer.ui”文件变为“simple_computer.py”。如下图所示:
在这里插入图片描述
12、生成的“simple_computer.py”代码如下:

# Form implementation generated from reading ui file 'simple_computer.ui'
#
# Created by: PyQt6 UI code generator 6.4.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_SimpleComputer(object):
    def setupUi(self, SimpleComputer):
        SimpleComputer.setObjectName("SimpleComputer")
        SimpleComputer.resize(400, 300)
        SimpleComputer.setStyleSheet("*{\n"
"    font-size:16px;\n"
"    color:rgb(0, 85, 255);\n"
"}")
        self.widget = QtWidgets.QWidget(SimpleComputer)
        self.widget.setGeometry(QtCore.QRect(10, 40, 322, 128))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.horizontalLayout_2.addWidget(self.lineEdit_2)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout_3.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout_3.addWidget(self.pushButton_2)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget)
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalLayout_3.addWidget(self.pushButton_3)
        self.pushButton_4 = QtWidgets.QPushButton(self.widget)
        self.pushButton_4.setObjectName("pushButton_4")
        self.horizontalLayout_3.addWidget(self.pushButton_4)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.verticalLayout.addWidget(self.label_3)

        self.retranslateUi(SimpleComputer)
        QtCore.QMetaObject.connectSlotsByName(SimpleComputer)

    def retranslateUi(self, SimpleComputer):
        _translate = QtCore.QCoreApplication.translate
        SimpleComputer.setWindowTitle(_translate("SimpleComputer", "简单计算器"))
        self.label.setText(_translate("SimpleComputer", "请输入第一个数字:"))
        self.label_2.setText(_translate("SimpleComputer", "请输入第二个数字:"))
        self.pushButton.setText(_translate("SimpleComputer", "+"))
        self.pushButton_2.setText(_translate("SimpleComputer", "-"))
        self.pushButton_3.setText(_translate("SimpleComputer", "*"))
        self.pushButton_4.setText(_translate("SimpleComputer", "/"))
        self.label_3.setText(_translate("SimpleComputer", "结果:3+5=8"))

13、在“simple_computer.py”文件同级建立“simple_computer_main.py”文件。代码如下:

#引入系统模块
import sys
#引入PyQt6模块
from PyQt6.QtWidgets import (
    QApplication,QDialog,QMessageBox
)
#引入平级的simple_computer模块
import simple_computer
#创建MySimpleCompute类
class MySimpleCompute(simple_computer.Ui_SimpleComputer,QDialog):
    #创建构造函数
    def __init__(self):
        #继承父类
        super().__init__()
        #调用父类的setupUi函数
        self.setupUi(self)
        #调用显示窗口
        self.show()
        #将pushButton_add绑定事件函数,进行加法计算
        self.pushButton_add.clicked.connect(self.do_compute("add"))
        # 将pushButton_sub绑定事件函数,进行减法计算
        self.pushButton_sub.clicked.connect(self.do_compute("sub"))
        # 将pushButton_mul绑定事件函数,进行乘法计算
        self.pushButton_mul.clicked.connect(self.do_compute("mul"))
        # 将pushButton_dovide绑定事件函数,进行除法计算
        self.pushButton_divide.clicked.connect(self.do_compute("div"))

    #创建do_compute函数,执行具体的计算
    def do_compute(self,method):

        #创建do_compute的内部函数
        def compute():
            # 将lineEdit_first的文本属性赋值给first
            first = self.lineEdit_first.text()
            second = self.lineEdit_second.text()
            # 判断lineEdit_first的输入是否为文本,如果不是,弹出提示框
            try:
                first = float(first)
            except:
                QMessageBox.warning(self, "信息提示", "第一个数字,不是数字,请重新输入")
            # 判断lineEdit_second的输入是否为文本,如果不是,弹出提示框
            try:
                second = float(second)
            except:
                QMessageBox.warning(self, "信息提示", "第二个数字,不是数字,请重新输入")
            #运算符号的初始值为空
            symbol=""
            #运算结果的初始值为0
            result=0
            #加法运算
            if method=="add":
                result=first+second
                symbol="+"
            #减法运算
            elif method=="sub":
                result=first-second
                symbol = "-"
            #乘法运算
            elif method=="mul":
                result=first*second
                symbol = "*"
            #除法运算
            elif method=="div":
                #判断分母是否为0,若为0,弹出警告框
                if second==0:
                    QMessageBox.warning(self,"信息提示","除法的时候,第二个数字不能为0")
                result=round(first/second,2)
                symbol = "/"
            #将运算结果赋值为label_result
            self.label_result.setText(f"结果:{first}{symbol}{second}={result}")
            #如果运算成功,弹出“计算成功”的提示信息
            QMessageBox.information(self,"信息提示","计算成功")
            return
        return compute

if __name__ == '__main__':
    #app的入口函数
    app=QApplication(sys.argv)
    #初始化类MySimpleCompute函数
    mySimpleCompute=MySimpleCompute()
    #退出系统
    sys.exit(app.exec())

五、pyinstaller打包命令

1、在anaconda终端输入以下命令:

 pyinstaller -F -w bmi_compute_main.py

对文件进行打包。如图;
在这里插入图片描述
2、打包后的文件如图所示:
在这里插入图片描述

六、小结

本文通过一个计算器的例子,演示PyQt6的简单应用。希望对新手学习者有帮助。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值