当前位置:   article > 正文

PyQt6案例2:BMI计算器_pyqt6项目案例

pyqt6项目案例

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

1、打开QTdesigner
2、选择Dialog without Buttons,并单击“创建”按钮。
在这里插入图片描述
3、添加控件。
(1)拖拽“Label”控件,在文本属性中添加文字“请输入身高(cm):”;在Label水平位置拖拽一个“Line Edit”控件。
(2)拖拽“Label”控件,在文本属性中添加文字“请输入体重(kg):”;在Label水平位置拖拽一个“Line Edit”控件。
(3)脱宅“Label”控件,在文本属性中添加文字“提示:1、中国成人居民BMI衡量标准是小于等于18.4为消瘦,18.5-23.9为正常,24-27.9为超重,大于等于28为肥胖。2、最理想的BMI数值为22,理想体重=22*身高^2(米),±10%波动。”,并勾选“wordWrap”属性(换行)。效果如图所示。在这里插入图片描述
(4)拖拽“Push Button”按钮控件,在文本属性中添加文字“计算BMI”。
(5)拖拽“Label”控件,在文本属性中添加文字“BMI:27.18,属于超重。您的理想体重为:68kg”。并勾选“wordWrap”属性(换行)。
(6)现在界面如图:
在这里插入图片描述
(7)“ctrl+s”保存文件。文件名称为“bmi_compute.ui”。

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

1、框选下图所示控件,点击“水平布局”,进行水平布局。
在这里插入图片描述
2、框选下图所示控件,点击“水平布局”(快捷键为“ctrl+1”),进行水平布局。
在这里插入图片描述
3、框选下图所示控件,点击“水平布局”(快捷键为“ctrl+2”),进行垂直布局。
在这里插入图片描述
4、框选下图所示控件,点击“水平布局”(快捷键为“ctrl+1”),进行水平布局。
在这里插入图片描述
5、增加“Label”控件,如下图。框选下图所示控件,点击“水平布局”(快捷键为“ctrl+2”),进行垂直布局。
在这里插入图片描述
6、单击窗体空白处,右键点击“垂直布局”(快捷键为“ctrl+2”),对整个窗体进行垂直布局。如下图所示:
在这里插入图片描述
7、选择窗体的"layoutstetch"属性,将上下部分的比例改为8:2,如下图所示。
在这里插入图片描述
8、选中下图所示控件,选择控件的"layoutstetch"属性,将左右部分的比例改为8:2,如下图所示。
在这里插入图片描述
9、已完成整个窗体布局,“ctrl+s”进行保存。

三、Qt6样式控制(QSS)

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

*{
	fontsize:14px;
}
QPushButton{
	height:50px;
}
QLabel{
	color:blue;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如图所示:
在这里插入图片描述
3、右键单击如图所示控件,打开“改变样式表”,输入下列代码,改变控件的背景色:
在这里插入图片描述

*{
  background-color:rgb(170, 255, 127);
}
  • 1
  • 2
  • 3

4、分别添加以下两个控件的“改变样式表”。
在这里插入图片描述
输入以下代码:

*{
	background-color:rgb(255, 255, 0);
}
  • 1
  • 2
  • 3

效果如图:
在这里插入图片描述
5、选择按钮控件,选择“改变样式表”,如下图所示:

在这里插入图片描述
输入代码,使按钮字体加粗

QPushButton{
	font:bold;
}
  • 1
  • 2
  • 3

6、“ctrl+s”进行文件保存。

四、PYQt6信号与槽的处理

1、选择下图所示控件,将"objectName"属性变为“lineEdit_height”。
在这里插入图片描述
2、选择下图所示控件,将"objectName"属性变为“lineEdit_weight”。
在这里插入图片描述
3、选择下图所示控件,将"objectName"属性变为“label_result”。

在这里插入图片描述
4、选择窗体,将"objectName"属性变为“BmiCompute”。
在这里插入图片描述
5、选择窗体,将"windowTitle"属性变为“人体BMI计算器”。
在这里插入图片描述
6、在anaconda中将“bmi_compute.ui”文件变为“bmi_compute.py”。如下图所示:
在这里插入图片描述
7、生成的“bmi_compute.py”代码如下:

# Form implementation generated from reading ui file 'bmi_compute.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_BmiCompute(object):
    def setupUi(self, BmiCompute):
        BmiCompute.setObjectName("BmiCompute")
        BmiCompute.resize(562, 417)
        BmiCompute.setStyleSheet("*{\n"
"    fontsize:14px;\n"
"}\n"
"QPushButton{\n"
"    height:50px;\n"
"}\n"
"QLabel{\n"
"    color:blue;\n"
"}")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(BmiCompute)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(BmiCompute)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.lineEdit_height = QtWidgets.QLineEdit(BmiCompute)
        self.lineEdit_height.setObjectName("lineEdit_height")
        self.horizontalLayout.addWidget(self.lineEdit_height)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(BmiCompute)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.lineEdit_weight = QtWidgets.QLineEdit(BmiCompute)
        self.lineEdit_weight.setObjectName("lineEdit_weight")
        self.horizontalLayout_2.addWidget(self.lineEdit_weight)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.pushButton = QtWidgets.QPushButton(BmiCompute)
        self.pushButton.setStyleSheet("QPushButton{\n"
"    font:bold;\n"
"}\n"
"")
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.horizontalLayout_3.addLayout(self.verticalLayout)
        self.label_3 = QtWidgets.QLabel(BmiCompute)
        self.label_3.setStyleSheet("*{\n"
"  background-color:rgb(170, 255, 127);\n"
"}")
        self.label_3.setWordWrap(True)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_3.addWidget(self.label_3)
        self.horizontalLayout_3.setStretch(0, 8)
        self.horizontalLayout_3.setStretch(1, 2)
        self.verticalLayout_3.addLayout(self.horizontalLayout_3)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_5 = QtWidgets.QLabel(BmiCompute)
        self.label_5.setStyleSheet("*{\n"
"    background-color:rgb(255, 255, 0);\n"
"}")
        self.label_5.setWordWrap(True)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_2.addWidget(self.label_5)
        self.label_result = QtWidgets.QLabel(BmiCompute)
        self.label_result.setStyleSheet("*{\n"
"    background-color:rgb(255, 255, 0);\n"
"}")
        self.label_result.setWordWrap(True)
        self.label_result.setObjectName("label_result")
        self.verticalLayout_2.addWidget(self.label_result)
        self.verticalLayout_3.addLayout(self.verticalLayout_2)
        self.verticalLayout_3.setStretch(0, 8)
        self.verticalLayout_3.setStretch(1, 2)

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

    def retranslateUi(self, BmiCompute):
        _translate = QtCore.QCoreApplication.translate
        BmiCompute.setWindowTitle(_translate("BmiCompute", "人体BMI计算器"))
        self.label.setText(_translate("BmiCompute", "请输入身高(cm):"))
        self.label_2.setText(_translate("BmiCompute", "请输入体重(kg):"))
        self.pushButton.setText(_translate("BmiCompute", "计算BMI"))
        self.label_3.setText(_translate("BmiCompute", "提示:1、中国成人居民BMI衡量标准是小于等于18.4为消瘦,18.5-23.9为正常,24-27.9为超重,大于等于28为肥胖。2、最理想的BMI数值为22,理想体重=22*身高^2(米),±10%波动。"))
        self.label_5.setText(_translate("BmiCompute", "您的计算结果是:"))
        self.label_result.setText(_translate("BmiCompute", "BMI:27.18,属于超重。您的理想体重为:68kg"))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99

项目结构如下:
在这里插入图片描述
8、在“bmi_compute.py”文件同级建立“bmi_compute_main.py”文件。代码如下:

#导入sys模块
import sys
#导入PyQt6模块
from PyQt6.QtWidgets import (
    QApplication,QDialog,QMessageBox
)
#引入同级的文件“bmi_compute"
import bmi_compute


#创建MyBmiCompute类
class MyBmiCompute(bmi_compute.Ui_BmiCompute,QDialog):
    #创建构造函数
    def __init__(self):
        #引入bmi_compute.Ui_BmiCompute父类
        super().__init__()
        #调用bmi_compute.Ui_BmiComput父类参数setupUi
        self.setupUi(self)
        #显示窗口
        self.show()
        #绑定按钮调用的事件函数
        self.pushButton.clicked.connect(self.compute_bmi)

    #构建compute_bmi函数
    def compute_bmi(self):
        #将lineEdit_height的文本属性赋值给heitht
        height=self.lineEdit_height.text()
        #判断身高的输入值是否为小数。如果不是,弹出消息框
        try:
            height=float(height)/100
        except:
            QMessageBox.warning(self,"信息提示","你输入的身高不是小数,请重新输入")
            return
        # 将lineEdit_weight的文本属性赋值给weitht
        weight=self.lineEdit_weight.text()
        #判断体重输入的值是否为小数。如果不是,弹出消息框
        try:
            weight=float(weight)
        except:
            QMessageBox.warning(self,"信息提示","你输入的体重不是小数,请重新输入")
            return
        #保存计算结果保留2位小数
        result=round(weight/(height**2),2)
        #理想的BMI进行计算,并保留2位小数
        ideal_result=round(22*(height**2),2)
        #将计算结果输入到输出标签中
        result_text=f"BMI:{result},属于超重。您的理想体重为:{ideal_result}kg"
        #将计算结果转行成字符串,赋值给label_result控件
        self.label_result.setText(str(result_text))

        #弹出信息框,说明计算成功
        QMessageBox.warning(self, "信息提示", "计算成功")

#创建入口函数
if __name__ == '__main__':
    # 入口函数
    app=QApplication(sys.argv)
    myBmiCompute=MyBmiCompute()
    # 退出系统
    sys.exit(app.exec())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

五、pyinstaller打包命令

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

 pyinstaller -F -w bmi_compute_main.py
  • 1

对文件进行打包。如图;

在这里插入图片描述

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

六、小结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/264692
推荐阅读
相关标签
  

闽ICP备14008679号