当前位置: 首页 > news >正文

《PyQt5》——设计Python GUI(图形用户界面)实例

PyQt5

PyQt5的配置和基础使用可以参考这篇文章:《 PyQt5》—— 创建 Python GUI(图形用户界面)

Python GUI(图形用户界面)实例

本实例是设计一个通过玉米和豆粕的价格来预测生猪的价格,并显示预测价格与实际价格波动情况。
如图最终结果:在这里插入图片描述
开始设计:1、创建一个新的在这里插入图片描述

四个标签:分别用来显示名称和对照表。注意显示对照表的标签大小要和照片的大小相同或者比照片大用来显示照片的全部内容。

在这里插入图片描述

在这里插入图片描述

三个文本框:

在这里插入图片描述

在这里插入图片描述

三个点击键:

在这里插入图片描述

函数设计

在这里插入图片描述
如图进行设计:清除键用来清除文本内的内容,预测键和打开参照表键来写外部函数。

完成后,将qt文件进行保存。

使用

将UI文件转化为py文件:
在这里插入图片描述

需要的文件:

在这里插入图片描述

  • 均价数据:通过网盘分享的文件:均价数据.xlsx
    链接: https://pan.baidu.com/s/1a9Ir9UmgBcGNHhL8DqaRUA 提取码: cyw9
模型训练和保存本地
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import joblib
import pandas as pd
from sklearn.model_selection import train_test_split

def train_tree():
    data = pd.read_excel('均价数据.xlsx')

    # 标准化
    # from sklearn.preprocessing import StandardScaler
    # scaler = StandardScaler()
    # data['玉米'] = scaler.fit_transform(data[['玉米']])
    # data['豆粕'] = scaler.fit_transform(data[['豆粕']])

    x = data.iloc[:, 1:-1]
    y = data.iloc[:, -1]
    # 数据切分
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
    # 创建决策树分类器对象
    tree = DecisionTreeRegressor()
    tree.fit(x_train, y_train)
    # 保存模型
    joblib.dump(tree, 'tree_model.pkl')


if __name__ == '__main__':
    train_tree()
    loaded_model = joblib.load('tree_model.pkl')
    print(loaded_model.predict(np.array([[2752,4383]])))

结果:在这里插入图片描述

使用
# 导入joblib库,用于模型的保存和加载
import joblib
# 导入NumPy库,用于进行高效的数值计算
import numpy as np
# 导入PyQt5的主要模块,用于创建图形用户界面(GUI)
from PyQt5 import QtCore, QtGui, QtWidgets  
# 导入QtCore模块的所有内容,QtCore包含了核心的非GUI功能,如信号与槽机制、线程等
from PyQt5.QtCore import *                 
# 导入QtGui模块的所有内容,QtGui包含了图形和多媒体相关的功能
from PyQt5.QtGui import *                  
# 导入QtWidgets模块中的一些特定类
from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox  
'''
QFileDialog可以帮助用户选择文件路径
QMainWindow则是创建具有菜单、工具栏和状态栏的主窗口的起点。
QMessageBox可以用于向用户显示提示或警告信息
'''

# 导入UI类,这个类包含了主窗口的设计,通常由Qt Designer生成
from untitled3 import Ui_MainWindow  
# 导入系统模块,用于访问命令行参数和系统相关功能,如退出应用程序
import sys   

# 定义一个继承自QMainWindow和Ui_MainWindow的类,作为主窗口的入口类
class PyQtMainEntry(QMainWindow, Ui_MainWindow):  
    def __init__(self):  # 构造函数,在创建类的实例时自动调用
        # 调用基类QMainWindow的构造函数进行初始化
        super().__init__()  
        # 调用setupUi方法,根据Ui_MainWindow设计设置界面,将设计好的UI应用到主窗口上
        self.setupUi(self)  

        # 使用joblib加载预训练好的模型,这里加载的是名为'tree_model.pkl'的模型文件
        self.model = joblib.load('tree_model.pkl')

    '''定义要触发的函数'''
    # 定义预测价格的函数,当用户点击相关按钮时会调用此函数
    def predict_price(self):
        try:
            # 获取用户在第一个输入框(lineEdit)中输入的玉米价格,并将其转换为整数
            corn_price = int(self.lineEdit.text())
            # 获取用户在第二个输入框(lineEdit_2)中输入的大豆价格,并将其转换为整数
            soybean_price = int(self.lineEdit_2.text())
            # 使用加载的模型对输入的玉米价格和大豆价格进行预测,将输入数据转换为NumPy数组
            predicted_price = self.model.predict(np.array([[corn_price, soybean_price]]))
            # 将预测结果显示在第三个输入框(lineEdit_3)中,只取预测结果数组的第一个元素
            self.lineEdit_3.setText(str(predicted_price[0]))
        except ValueError:
            # 如果用户输入的不是有效的整数,弹出警告消息框提示用户输入有效的价格
            QMessageBox.warning(self, '错误', '请输入有效的价格')

    # 定义显示图表的函数,当用户点击相关按钮时会调用此函数
    def showbiao(self):
        try:
            # 使用QPixmap加载名为'Figure_1.png'的图片文件
            pixmap = QPixmap('Figure_1.png')
            # 将加载的图片显示在名为label_4的标签上
            self.label_4.setPixmap(pixmap)
        except Exception as e:
            # 如果加载图片过程中出现错误,打印错误信息
            print('Error loading image:', e)

# 程序的入口点,当直接运行该脚本时会执行以下代码
if __name__ == "__main__":
    # 创建应用程序实例,sys.argv是命令行参数列表,用于传递启动参数给应用程序
    app = QtWidgets.QApplication(sys.argv)  
    # 创建主窗口实例
    window = PyQtMainEntry()  
    # 显示主窗口
    window.show()  
    # 进入应用程序的事件循环,等待用户操作,直到用户关闭窗口或程序退出
    # sys.exit用于确保在退出时进行清理工作
    sys.exit(app.exec_())  

结果:在这里插入图片描述
输入内容和按键进行使用。

相关文章:

  • 开关模式电源转换器 EMI/EMC 的集成仿真
  • 查看电脑信息
  • STM32的Systick定时器的作用
  • 每日一题——只出现一次的数字
  • vue3:一文理解h函数的使用
  • SpringbootActuator未授权访问漏洞
  • 优选算法系列(1. 双指针_上)
  • 转和git subtree管理方式为git submodule的管理方式
  • Fast DDS Security--两方秘钥存在的问题
  • 【Linux系统】进程状态:一个进程的轮回史
  • 技术聚焦:Debezium 如何将数据库数据精准注入 Kafka
  • Ubuntu 22.04 升级到 Ubuntu 24.04 全流程指南
  • 群晖DS223 Docker搭建为知笔记
  • 【每日八股】Golang篇(三):关键字(下)
  • 【论文解读】《START: Self-taught Reasoner with Tools》
  • 2025年网络安全(黑客技术)120天自学手册
  • 面向高质量视频生成的扩散模型方法-算法、架构与实现【附核心代码】
  • SQLAlchemy系列教程:如何执行原生SQL
  • 【网络安全 | 漏洞挖掘】$15,000——通过持久token获取个人身份信息(PII)
  • 小智智能体语言大模型硬件软件开发
  • 商务部:对原产于美国、欧盟、台湾地区和日本的进口共聚聚甲醛征收反倾销税
  • 《掩耳盗邻》:富人劫富,是犯罪,也是赎罪?
  • 海外市场,押注中国无人驾驶龙头
  • 经济日报金观平:促进信贷资金畅达小微企业
  • 视频丨歼-10CE首次实战大放异彩
  • 时隔3年,持续近2小时,俄乌在土耳其谈成了什么?