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_())
结果:
输入内容和按键进行使用。