環(huán)境準備:
python3.12
PyQt5 5.15.10
PyQt5-Qt5 5.15.2
安裝依賴
# python依賴
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# ui設(shè)計用
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# 打包用
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# 訊飛大模型接口調(diào)用依賴 ,參考:https://www.xfyun.cn/doc/spark/Web.html#
pip install --upgrade spark_ai_python
配置Qs designer 工具參數(shù)

image.png
D:\SlowSoftware\anaconda\Library\bin\designer.exe()
$FileDir$

image.png
D:\SlowSoftware\anaconda\envs\go_game\python.exe
$FileDir$

image.png
設(shè)計界面

image.png
打開qt designer界面,左邊菜單欄選擇控件進行界面設(shè)計

image.png

image.png
右鍵ui文件生成ui代碼:

image.png
生成的代碼無需做任何修改
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(610, 491)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(450, 70, 93, 41))
self.pushButton.setObjectName("pushButton")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(50, 190, 541, 181))
self.textBrowser.setObjectName("textBrowser")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(60, 20, 61, 20))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(50, 50, 331, 91))
self.lineEdit.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 610, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(self.textBrowser.show)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "你的小滿滿"))
self.pushButton.setText(_translate("MainWindow", "發(fā)送"))
self.label.setText(_translate("MainWindow", "快問我!"))
# @Author:zh
# @Data:2024/6/29 19:41
# @:PyCharm
# Python版本:3.7
import json
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模塊中
from PyQt5.QtWidgets import QApplication, QMainWindow
#導(dǎo)入designer工具生成的login模塊
from untitled import Ui_MainWindow
from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
#星火認知大模型Spark Max的URL值,其他版本大模型URL值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v1.1/chat'
#星火認知大模型調(diào)用秘鑰信息,請前往訊飛開放平臺控制臺(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火認知大模型Spark Max的domain值,其他版本大模型domain值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'general'
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
# 這里是按鍵觸發(fā)對應(yīng)邏輯方法的關(guān)鍵
self.pushButton.clicked.connect(self.display)
def display(self):
input=self.lineEdit.text()
print(input)
spark = ChatSparkLLM(
spark_api_url=SPARKAI_URL,
spark_app_id=SPARKAI_APP_ID,
spark_api_key=SPARKAI_API_KEY,
spark_api_secret=SPARKAI_API_SECRET,
spark_llm_domain=SPARKAI_DOMAIN,
streaming=False,
)
messages = [ChatMessage(
role="user",
content=input
)]
handler = ChunkPrintHandler()
a = spark.generate([messages], callbacks=[handler])
response= ""
for i in a.generations:
response= i[0].text
# 這里是頁面顯示內(nèi)容的關(guān)鍵
self.textBrowser.setText(response)
self.textBrowser.show()
if __name__ == "__main__":
#固定的,PyQt5程序都需要QApplication對象。sys.argv是命令行參數(shù)列表,確保程序可以雙擊運行
app = QApplication(sys.argv)
#初始化
myWin = MyMainForm()
#將窗口控件顯示在屏幕上
myWin.show()
#程序運行,sys.exit方法確保程序完整退出。
sys.exit(app.exec_())
打包
# -F=>exe包 -w運行程序不運行cmd窗口
pyinstall -F -w main.py
done

image.png