在农业饲料行业,玉米、豆粕作为核心原料,其价格波动直接影响养殖成本与企业利润。传统人工估算价格不仅效率低,还容易受主观经验影响。本文将手把手带你打造一款桌面端价格预测工具,全程采用「Qt Designer可视化UI设计 + 机器学习模型训练 + PyQt5业务逻辑绑定」的完整流程,最终实现可直接运行的桌面应用,哪怕是零基础也能跟着完成。

一、项目整体架构与功能规划

1. 核心功能

• 价格预测:输入玉米、豆粕实时价格,通过训练好的机器学习模型输出目标价格预测值

• 一键清空:快速重置输入框,方便连续预测

• 数据对照表:一键打开历史价格趋势图,直观查看价格波动规律

• 输入校验:自动识别非法输入,弹出错误提示,避免程序崩溃

2. 技术栈选型
模块 技术选型 作用
UI 设计 Qt Designer + PyQt5 可视化拖拽生成界面,无需手写复杂布局代码
机器学习 scikit-learn 决策树回归 训练价格预测模型,适配小样本农业数据
数据处理 pandas + numpy 数据读取、清洗与模型输入预处理
可视化 matplotlib 生成历史价格趋势图,嵌入桌面应用
模型持久化 joblib 保存训练好的模型,实现快速加载调用

二、Qt Designer可视化界面设计(核心步骤)

Qt Designer是PyQt5的可视化UI设计工具,无需手写布局代码,拖拽控件即可完成界面设计,完美适配我们的需求。

1. 新建项目

打开Qt Designer,选择「Main Window」模板,创建主窗口。

2. 控件布局与命名

按照需求拖拽控件,完成界面布局,核心控件清单如下:

控件类型 数量 作用 命名规范
QLabel 3 个 标签提示(玉米、豆粕、预测值) label_1、label_2、label_3
QLineEdit 3 个 输入框(玉米价格、豆粕价格)+ 结果框(预测值) lineEdit、lineEdit_2、lineEdit_3
QPushButton 3 个 功能按钮(预测、清空、打开对照表) pushButton、pushButton_2、pushButton_3
QLabel 1 个 右侧大图展示区域(显示趋势图) label_4
3. 样式优化

统一设置字体、大小、间距,提升界面美观度:

• 字体统一设置为「18pt Arial」,保证清晰可读

• 输入框大小统一为160×41,按钮大小统一为101×51,界面整齐规范

4. 信号槽绑定(关键!)

在Qt Designer中直接拖拽连线,完成按钮与功能的绑定:

• 「清空」按钮 → 绑定clear()槽函数,实现一键清空三个输入框

• 「预测」按钮 → 绑定predict_price()槽函数,触发模型预测逻辑

• 「打开对照表」按钮 → 绑定showbiao()槽函数,加载并显示趋势图

5. 导出UI文件

在 PyCharm 中右键价格.ui文件 → External Tools → PyUIC

生成的价格.py为UI定义文件,无需手动修改,后续直接导入主程序即可。

三、机器学习模型训练与保存

我们采用决策树回归模型训练价格预测模型,适配农业价格数据的非线性特征,训练流程如下:

1. 数据准备

准备历史价格数据均价数据.xlsx,包含「玉米价格」「豆粕价格」「目标价格」三列,作为模型的训练数据。

2. 模型训练代码
import pandas as pd
import joblib
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split

def train_price_model():
    # 1. 读取数据
    data = pd.read_excel('均价数据.xlsx')
    # 2. 划分特征与标签:特征为玉米、豆粕价格,标签为目标价格
    X = data[['玉米价格', '豆粕价格']]
    y = data['目标价格']
    # 3. 划分训练集与测试集(8:2比例)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    # 4. 训练决策树回归模型
    model = DecisionTreeRegressor(random_state=42)
    model.fit(X_train, y_train)
    # 5. 模型评估(可选)
    score = model.score(X_test, y_test)
    print(f"模型测试集准确率: {score:.2f}")
    # 6. 保存模型到本地
    joblib.dump(model, 'price_model.pkl')

if __name__ == '__main__':
    train_price_model()

运行代码后,会生成训练好的模型文件price_model.pkl,后续直接加载到桌面应用中。

四、主程序逻辑实现(价格预测.py)

将UI文件与模型结合,编写业务逻辑,实现完整的桌面应用功能。

1. 完整主程序代码
# -*- coding: utf-8 -*-
import numpy as np
import sys
import joblib
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QMessageBox
from PyQt5.QtGui import QPixmap
from 价格 import Ui_MainWindow # 导入Qt生成的UI文件

class PyQtMainEntry(QMainWindow, Ui_MainWindow):  # 定义一个继承自QMainWindow和Ui_MainWindow的类
    def __init__(self):  # 构造函数
        super().__init__()  # 调用基类的构造函数进行初始化
        self.setupUi(self)  # 调用setupUi方法,根据Ui_MainWindow设计设置界面
        # 参数初始化
        self.model = joblib.load('tree_model.pkl')


    '''定义要触发的函数'''
    def predict_price(self):
        try:
            corn_price = int(self.lineEdit.text())  
            soybean_price = int(self.lineEdit_2.text())
        # 使用模型预测价格
            predicted_price = self.model.predict(np.array([[corn_price, soybean_price]]))  # 更新预测结果的标签文
            self.lineEdit_3.setText(str(predicted_price[0]))
        except ValueError:
            QMessageBox.warning(self,'错误','请输入有效价格')

    def showbiao(self):
        try:
            pixmap = QPixmap("Figure_1.png")
            self.label_4.setPixmap(pixmap)
        except Exception as e:
            print("Error loading image:", e)
    def slot1(self):
        print('predicted_price')


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  # 创建应用程序实例
    window = PyQtMainEntry()  # 创建主窗口实例
    window.show()  # 显示主窗口
    sys.exit(app.exec_())  # 进入事件循环,并确保在退出时清理
2. 核心逻辑说明

• 模型加载:在__init__中一次性加载模型,避免每次预测重复加载,提升运行效率

• 输入校验:捕获ValueError,识别非法输入,弹出友好提示,避免程序崩溃

• 结果优化:预测结果保留2位小数,符合价格展示习惯;结果框设为只读,防止手动修改

• 图片自适应:趋势图自动适配右侧标签大小,保持图片比例,避免拉伸变形

3.运行效果

• 输入玉米、豆粕价格

• 点击【预测】→ 显示预测结果

• 点击【清空】→ 快速重置

• 点击【打开对照表】→ 显示数据图表

五、项目亮点与优化方向

1. 项目亮点

• 可视化开发:Qt Designer拖拽设计界面,无需手写复杂布局,开发效率提升80%

• UI与逻辑分离:UI文件与业务逻辑完全分离,便于后续界面修改与功能迭代

• 模型嵌入桌面:将机器学习模型直接嵌入桌面应用,无需部署服务器,本地即可使用

• 鲁棒性强:完善的输入校验与异常捕获,避免程序崩溃,用户体验友好

• 可打包分发:可通过PyInstaller打包为exe文件,无Python环境也能直接运行

2. 优化方向

• 新增模型更新功能,支持用户上传新数据重新训练模型

• 增加价格预警功能,当预测价格超出阈值时自动提醒

• 优化界面样式,添加主题切换、数据导出等功能

• 替换模型为XGBoost、LightGBM等更精准的算法,提升预测准确率

六、总结

本文完整实现了一款农业价格预测桌面工具,从Qt Designer可视化UI设计,到机器学习模型训练,再到PyQt5业务逻辑绑定,全程无冗余步骤,零基础也能快速上手。该工具不仅解决了农业行业价格预测的实际需求,更提供了「UI设计+模型部署」的通用桌面应用开发方案,可快速迁移到其他行业的预测、分析工具开发中。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐