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_splitdef 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_())
結果:
輸入內容和按鍵進行使用。