Pyqt5 开发简易google翻译器

界面

在这里插入图片描述

资源导入

在这里插入图片描述

信号槽添加

在这里插入图片描述

google翻译库

  • 使用pycharm进行第三方库的安装,在设置里安装,比用pip安装方便,
    因为pip安装一些三方库时经常出现超时的情况,pycharm基本不会!
    这里安装的是googletrans第三方库

在这里插入图片描述

翻译库的使用

新开一个线程去翻译,如下
class CGoogleTransThread(QThread):
    threadTrans = pyqtSignal(str)

    def __init__(self, sDestTrans, sContent):
        super(CGoogleTransThread, self).__init__()
        self.m_sDestTrans = sDestTrans
        self.m_sContent = sContent

    def run(self):
        lstData = []
        sResultData = ""
        oTran = Translator(service_urls=["translate.google.cn"])
        # ts = T.translate(['The quick brown fox', 'jumps over', 'the lazy dog'], dest='zh-CN')
        try:
            oText = oTran.translate(self.m_sContent, dest=self.m_sDestTrans)
            if isinstance(oText.text, list):
                for i in oText:
                    lstData.append(i.text)
                sResultData = " ".join(lstData)
            else:
                sResultData = oText.text
        except:
            sResultData = "An error happended. Please retry..."
        self.threadTrans.emit(sResultData)  # emit signal once translatation is finfished

使用

self.m_oThreadTrans = CGoogleTransThread(self.m_sDestLan, sOriText)
self.m_oThreadTrans.threadTrans.connect(self._finishedTrans)
self.m_oThreadTrans.start()

国际化语言翻译

首先生产qm文件

  • 首先生产ts文件,xxxx.ts的生成如下,进入你编写py文件的目录下,使用pylupdate5命令。它的语法规则为:
    pylupdate5 要翻译的py文件的名字.py -ts 随便取个名字 -ts (备注:那个随便取的名字一般要见名知意,譬如zh_CN就是中文简体,en就是英文等等)
    在这里插入图片描述
  • 用Qt Linguist.exe(这个程序一般在你安装Python的文件夹/Lib/site-packages/pyqt5-tools下面)
    在这里插入图片描述
    每翻译好一个后要打上那个√!。所有的弄好了后,点击file中的Release。就会在当前文件夹下生成xxxx.qm文件了
在这里插入代码片 # 设置当前语言
def changeCurLan(self, iSetLan):
    import os
    sBase = os.path.abspath(".")
    if iSetLan == 0 and self.m_iLanType != 0:
        self.m_iLanType = 0
        print("[ChangeLan] --> zh_CN")
        sPath = os.path.join(sBase, "../", "zh_CN.qm")
        self.m_oCurLan.load(sPath)
    elif iSetLan == 1 and self.m_iLanType != 1:
        self.m_iLanType = 1
        print("[ChangeLan] --> English")
        sPath = os.path.join(sBase, "../", "en.qm")
        bLoadResult = self.m_oCurLan.load(sPath)
        print("loadresult", bLoadResult)
    else:
        return
    _app = QApplication.instance()
    bResult = _app.installTranslator(self.m_oCurLan)
    print("installresult", bResult)
    self.retranslateUi(self)

QSS样式的使用

def _initStyle(self):
     try:
         with open("../Res/style.qss") as f:
             style = f.read()  # 读取样式表
             self.setStyleSheet(style)
     except:
         print("open stylesheet error")

# 从qrc文件中读取
 def _initStyle(self):
     qss_file = QFile(":Res/style.qss")
     qss_file.open(QFile.ReadOnly)
     qss = str(qss_file.readAll(), encoding='utf-8')
     qss_file.close()
     self.setStyleSheet(qss)

打开网页

def openUrl(self, sUrl):
     QDesktopServices.openUrl(
         QUrl(sUrl)
     )

打开文件,读取数据

 # 打开文件,读取数据
def openFile(self):
    sFileName, sFileType = QFileDialog.getOpenFileName(self, "Open File", ".")
    if sFileName:
        print("Open: ", sFileName, sFileType)
        with open(sFileName, encoding="utf-8") as f:
            try:
                self.txtEditOri.setPlainText(str(f.read()))
            except Exception as e:
                self.txtEditOri.setPlainText(e.args[1])

导出数据到文件

# 导出数据到文件
def exportFile(self):
    sTransTxt = self.txtEditTrans.toPlainText()
    if not sTransTxt:
        return
    sFileName, sFileType = QFileDialog.getSaveFileName(self, "Save File", ".", "Text files(*.txt);;All files(*.*)")
    if sFileName:
        with open(sFileName, "w", encoding="utf-8") as f:
            try:
                f.write(sTransTxt)
            except Exception as e:
                self.txtEditTrans.setPlainText(e.args[1])

窗口设置置顶

# 窗口置顶
def setWindowTop(self, bTop):
    if bTop:
        self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)
        self.show()
    else:
        self.setWindowFlags(Qt.Widget)
        self.show()

复制内容

def _copyResultText(self):
    sText = self.txtEditTrans.toPlainText()
    if not sText:
        return
    clipboard = QApplication.clipboard()
    clipboard.setText(sText)

窗口居中

def Center(self):
    qr = self.frameGeometry()
    cp = QDesktopWidget().availableGeometry().center()
    qr.moveCenter(cp)
    self.move(qr.topLeft())

main.py中设置搜索路径

 def _initSysPath(self):
    import os
    import sys
    lstPath = [
        "qrcpy",  # 要写这个,否则qrc导出的py,import时找不到模块
    ]
    sBase = os.path.abspath(".")
    print("code base path: ", sBase)
    for sPath in lstPath:
        sFullPath = os.path.join(sBase, sPath)
        print("AppendPath: ", sFullPath)
        sys.path.append(sFullPath)

CAppInit()

def Start():
    import dlgmain
    dlgmain.Start()

Start()

源码

github源码

目录结构

在这里插入图片描述打成exe遇到qrc的pyimport失败的问题,在main.spec中增加路径就好
在这里插入图片描述
然后使用该spec来制作exe

pyinstaller -F -c main.spec

pycharm没有自动提示

对于pyqt的一些提示,目前是import *,日后若pyqt可以自动提示,这里可以修改一下

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import  *

对于自己写的一些包没有提示,则加入搜索路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值