当前位置: 首页 > article >正文

使用python调用翻译大模型实现本地翻译【exe客户端版】

以前分享过一个 关于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 TranslateZh


class TranslateThread(QThread):
    result_signal = pyqtSignal(str)
    error_signal = pyqtSignal(str)

    def __init__(self, keyword, lang_type):
        super().__init__()
        self.keyword = keyword
        self.lang_type = lang_type

    def 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("请输入需要翻译的内容!")
            return

        lang_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


http://www.kler.cn/a/467731.html

相关文章:

  • Ubuntu22.04配置静态ip
  • 2025 年前端新技术如何塑造未来开发生态?
  • Oracle 11g rac + Dataguard 环境调整 redo log 大小
  • Prism模块化
  • Vue3实现PDF在线预览功能
  • 如何进一步提高Oracle lgwr的写性能?
  • c#2025/1/4 周六
  • HTML5 手风琴(Accordion)详解
  • 基于单片机的俄罗斯方块设计
  • badboy坏男孩批量抓取录制接口(接口可导入到jmeter中使用)
  • node.js之---事件循环机制
  • 力扣【SQL连续问题】
  • Spring源码分析之事件机制——观察者模式(二)
  • 理解linux内核中的几种地址
  • Java枚举和常量类的区别以及优缺点
  • wordpress开发之实现使用第三方库qrcode-generator生成二维码并上传和展示
  • 若依使用 Undertow 替代 Tomcat 容器
  • 密码学原理技术-第十一章-Hash Functions
  • java_配置使用nacos完整示例
  • 默认ip无法访问,利用dhcp功能获取ip进行访问的方法
  • 三子棋游戏
  • centos双网卡不能上网
  • Nginx:安装部署和升级(平滑升级)
  • js-19-手写题
  • 软件逆向之标志位
  • 【测试工具】 Postman 基本使用