以前分享过一个 关于python 部署 网页端的 翻译大模型的 文章
有兴趣的小伙伴可以去看一下
https://blog.csdn.net/Drug_/article/details/144488795
今天就再分享一个 使用python 来制作一个 exe 客户端版的 本地大模型。
实际也很简单 只不过把 用 fastApi 框架 做的 网页端 换成 PyQt5 来制作 客户端的桌面应用
实现的效果如下:
使用 exe 制作 客户端 的代码 如下
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QComboBox, QTextEdit, QPushButton, QLabel, QSplitter
from PyQt5.QtCore import QThread, pyqtSignal, Qt
import traceback
from translateUtils import TranslateZhclass TranslateThread(QThread):result_signal = pyqtSignal(str)error_signal = pyqtSignal(str)def __init__(self, keyword, lang_type):super().__init__()self.keyword = keywordself.lang_type = lang_typedef run(self):try:translator = TranslateZh()translation_result = translator.getTo(self.keyword, self.lang_type)self.result_signal.emit(translation_result)except Exception as e:# 获取异常的详细信息error_message = f"翻译过程中出现错误: {str(e)}"# 获取堆栈追踪信息error_traceback = traceback.format_exc()# 将错误信息和堆栈信息发送到界面self.error_signal.emit(f"{error_message}\n详细信息:\n{error_traceback}")# PyQt5 桌面应用
class DesktopApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle('本地翻译器')# 设置窗口大小和背景颜色self.setGeometry(100, 100, 1000, 600)self.setStyleSheet("background-color: #f0f0f0;")# 创建界面控件self.lang_type_combobox = QComboBox()self.lang_type_combobox.addItems(["英 - 中", "中 - 英"])self.lang_type_combobox.setStyleSheet("font-size: 16px; padding: 5px; background-color: white;")self.input_text = QTextEdit()self.input_text.setPlaceholderText("请输入需要翻译的内容...")self.input_text.setStyleSheet("font-size: 16px; padding: 10px; background-color: white; border-radius: 5px;")self.translate_button = QPushButton("翻译")self.translate_button.setStyleSheet("""QPushButton {font-size: 18px;background-color: #4CAF50;color: white;border-radius: 5px;padding: 10px 20px;}QPushButton:hover {background-color: #45a049;}""")# 使用 QTextEdit 来显示翻译结果self.result_text_edit = QTextEdit()self.result_text_edit.setPlaceholderText("翻译结果将显示在这里...")self.result_text_edit.setStyleSheet("font-size: 18px; color: #333; padding: 10px;")self.result_text_edit.setReadOnly(True)self.result_text_edit.setWordWrapMode(True) # 启用自动换行self.loading_label = QLabel("翻译中,请稍等...")self.loading_label.setStyleSheet("color: blue; font-size: 16px;")self.loading_label.setVisible(False) # 默认隐藏# 左侧布局(语言选择和输入框)left_layout = QVBoxLayout()left_layout.addWidget(self.lang_type_combobox)left_layout.addWidget(self.input_text)left_layout.addWidget(self.translate_button)left_layout.addWidget(self.loading_label)# 右侧布局(翻译结果显示)right_layout = QVBoxLayout()right_layout.addWidget(self.result_text_edit)# 创建 QSplitter 用于调整左右两侧宽度splitter = QSplitter(Qt.Horizontal)left_widget = QWidget()left_widget.setLayout(left_layout)right_widget = QWidget()right_widget.setLayout(right_layout)splitter.addWidget(left_widget)splitter.addWidget(right_widget)# 设置布局main_layout = QVBoxLayout()main_layout.addWidget(splitter)container = QWidget()container.setLayout(main_layout)self.setCentralWidget(container)# 连接事件self.translate_button.clicked.connect(self.translate_text)def translate_text(self):keyword = self.input_text.toPlainText().strip()if not keyword:self.result_text_edit.setText("请输入需要翻译的内容!")returnlang_type = "en" if self.lang_type_combobox.currentText() == "英 - 中" else "zh"self.loading_label.setVisible(True)self.result_text_edit.clear() # 清空结果# 启动翻译线程self.translate_thread = TranslateThread(keyword, lang_type)self.translate_thread.result_signal.connect(self.update_result)self.translate_thread.error_signal.connect(self.update_error)self.translate_thread.start()def update_result(self, result):self.loading_label.setVisible(False)self.result_text_edit.setText(result)def update_error(self, error_message):self.loading_label.setVisible(False)self.result_text_edit.setText(error_message)if __name__ == '__main__':qt_app = QApplication(sys.argv)window = DesktopApp()window.show()sys.exit(qt_app.exec_())
python 版本:Python 3.8.20
安装打包依赖
pip install pyinstaller==6.0
打包命令:
pyinstaller --onefile --windowed main.py
打包后的文件在dist 文件夹里
运行此项目要有python编程基础!!!
代码内置的 翻译大模型 不保证 翻译的准确性。
内置翻译大模型 支持:
中文翻译英文
英文翻译中文
大模型和 源码地址如下:
https://wwwoop.com/home/Index/projectInfo?goodsId=42&typeParam=2