从0到1打造PyQt5价格预测桌面工具:Qt Designer可视化设计+机器学习模型部署全流程
在农业饲料行业,玉米、豆粕作为核心原料,其价格波动直接影响养殖成本与企业利润。传统人工估算价格不仅效率低,还容易受主观经验影响。本文将手把手带你打造一款桌面端价格预测工具,全程采用「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设计+模型部署」的通用桌面应用开发方案,可快速迁移到其他行业的预测、分析工具开发中。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)