一、环境配置

1、在python官网下载windows的python安装包,安装python,记得勾选设置环境变量,否则需要自己去设置。

2、在命令行下输入python,如果有Python的版本号出现,且>>>出现,则说明安装成功,输入exit()退出python命令行模式。

3、安装pip,在命令行下输入:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

在命令行下输入:python get-pip.py

如果不行可以去下载安装包进行安装:https://pypi.org/project/pip/

4、安装pyqt5:在命令行下输入:pip install pyqt5

5、安装googletrans,在命令行下输入:pip install googletrans

6、如果要打包成exe程序,则在命令行下输入:pip install pyinstaller

安装pyinstaller成功后进入程序放置的目录在命令行下输入:pyinstaller -F 程序名.py

如果需要在显示的窗口下不显示命令行窗口则输入:pyinstaller -F 程序名.py --noconsole

cmd命令行下,输入d:进行磁盘下,其他盘依次对应,输入:cd 文件夹名,进入当前磁盘下的文件夹下。

二、代码

1、导入需要的类

#!/bin/env python3
# -*- coding:utf-8 -*-import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QTextEdit, QComboBox, QPushButton
from PyQt5.QtCore import pyqtSignal, QObject, Qt, QThread, QTimer
from googletrans import Translator

其中包含了ui设计界面下的窗口,输入框,显示框,选择框的类

QtCore下需要用到的信号和槽,线程,定时器类

同时也用到了需要的谷歌翻译的类

2、封装谷歌翻译的数据处理

#翻译处理
class GoogleTrans(QObject):tranOverSignal = pyqtSignal(str)tranLangsChange = pyqtSignal(str)def __init__(self):super().__init__()#当前要翻译的文本self.currentText=''#当前选择的要翻译成的语言self.currentDest='en'#设置网址self.translator = Translator(service_urls=['translate.google.cn'], timeout=3)self.langs = self.translator.detect(self.currentText)#获取翻译之后的文本,翻译完成之后会触发翻译完成信号def getTransText(self):try:self.getTransLangs()text = self.translator.translate(self.currentText,dest=self.currentDest).textself.tranOverSignal.emit(text)except:print('error')#检测源文本的语言def getTransLangs(self):self.langs = self.translator.detect(self.currentText)self.tranLangsChange.emit(self.langs.lang)#设置要翻译的文本def setTransText(self, str):self.currentText=str;#设置要翻译的语言def setCurrentDest(self, str):if str == '英文':self.currentDest='en'elif str == '中文':self.currentDest='zh-cn'elif str == '韩语':self.currentDest='ko'elif str == '日语':self.currentDest='ja'elif str == '法语':self.currentDest='fr'elif str == '俄罗斯语':self.currentDest='ru'elif str == '荷兰语':self.currentDest='nl'elif str == '丹麦语':self.currentDest='da'elif str == '阿拉伯语':self.currentDest='tl'else:self.currentDest='en'#self.getTransText()

对存入的要翻译的文本进行保存,对需要翻译的类型进行保存。因为要实时的翻译,每当文本的内容改变都会调用翻译函数进行翻译,而翻译的过程需要去进行联网获取翻译后的内容,如果输入的过快,会看到UI界面卡顿的情况。因此将翻译的过程放在单独的线程中,这样就不会造成界面卡顿的情况。

3、初始化界面

#主界面
class MainWidget(QWidget):def __init__(self):super().__init__()#输入数据框self.sourceText = QTextEdit()#转换完成数据显示框self.transText = QTextEdit()#清空翻译内容self.clearBtn = QPushButton('清空')#语言选择框self.selctLanguage = QComboBox()#延迟转换定时器self.delayTimer = QTimer()#转换线程self.myThread = QThread()#转换数据处理self.googletrans = GoogleTrans()#初始化界面self.initUI()def initUI(self):#设置窗口标题self.setWindowTitle('Google快捷翻译')#设置窗体尺寸self.resize(640, 420)#对界面进行布局mainLayout=QGridLayout(self);mainLayout.addWidget(self.sourceText,0,0)mainLayout.addWidget(self.clearBtn, 0, 1)mainLayout.addWidget(self.selctLanguage,1,1)mainLayout.addWidget(self.transText, 1, 0)self.setLayout(mainLayout)#设置显示框没有焦点self.transText.setFocusPolicy(Qt.NoFocus)#设置转换语言选择lanItems=[]lanItems.append('英文');lanItems.append('中文');lanItems.append('韩语');lanItems.append('日语');lanItems.append('法语');self.selctLanguage.addItems(lanItems)#设置定时器超时只触发一次,初始化定时器self.delayTimer.setSingleShot(True)self.delayTimer.stop()self.delayTimer.timeout.connect(self.timerOutFun)#清空翻译内容self.clearBtn.clicked.connect(self.clearSocureText)#初始化翻译类self.googletrans.moveToThread(self.myThread)self.googletrans.tranOverSignal.connect(self.transText.setText)self.googletrans.tranLangsChange.connect(self.sourceLangChange)#线程启动之后获取翻译后的文本self.myThread.started.connect(self.googletrans.getTransText)self.myThread.finished.connect(self.threadFinished)#输入框的文字改变时启动翻译self.sourceText.textChanged.connect(self.sourceTextChange)#选择的语言改变的时候重新进行翻译self.selctLanguage.currentTextChanged.connect(self.sourceTextChange)#清空输入内容def clearSocureText(self):self.sourceText.setText('')#开启定时器,在延迟一定的时间之后才进行翻译,避免翻译速度过快造成界面卡顿def sourceTextChange(self):if self.myThread.isRunning():self.delayTimer.start(200)else:self.delayTimer.timeout.emit()#停止定时器,重新开启线程进行翻译def timerOutFun(self):self.delayTimer.stop()#如果线程正在运行,则停止当前的线程。if self.myThread.isRunning():self.myThread.quit()#self.myThread.wait()else:self.myThread.finished.emit()'''self.googletrans.setCurrentDest(self.selctLanguage.currentText())self.googletrans.setTransText(self.sourceText.toPlainText())self.myThread.start()'''def threadFinished(self):self.googletrans.setCurrentDest(self.selctLanguage.currentText())self.googletrans.setTransText(self.sourceText.toPlainText())self.myThread.start()#源语言改变def sourceLangChange(self, str):currentLang = self.selctLanguage.currentText()if str == 'zh-cn' or str == 'zh-CN':currentLang = '英文'elif str == 'en':currentLang = '中文'else:currentLang = '中文'self.selctLanguage.setCurrentText(currentLang)

如果每次文本改变都去调用翻译的过程,虽然翻译的过程在单独的线程中,但是当当前的翻译没有完成,而退出当前的翻译过程,不进行等待,直接开始新的翻译过程,则会造成翻译结果的丢失,翻译的不完整。如果进行等待,则又会造成界面的卡顿。

因此在处理的过程中添加了一个定时器,如果输入的间隔在200ms以内则不进行翻译,同时重置定时器,在200ms以后再进行翻译,这样虽然会使翻译的结果延长了200ms,但是输入的界面会比较流畅,不会出现卡顿的情况。在这个时间间隔内也不会有明显的翻译延迟。在选择框里对翻译的语言没有全部加进去,如果有需要可以自己添加进去就可以了。

4、主函数

#主函数
if __name__=='__main__':print("start")app=QApplication(sys.argv)w=MainWidget()w.show()sys.exit(app.exec_())

主函数的内容就比较简单,申请一个界面,进行显示。

5、效果图

输入是自动识别,输入翻译需要手动去选择。

总结:

一直想自己写个代码,去实现日常的翻译,不用每次都去打开浏览器,找到谷歌翻译,再进行翻译,但是一直纠结于用c++实现对google翻译整个过程的繁琐。用python实现又没有界面的便利,于是迟迟未动手。这两天查找了一下相关的资料对整个过程进行实现。整个过程,是在ubuntu下进行编程调试,最后在windows下进行python的安装打包。在期间对谷歌翻译资料的查找,对应用实现的构思,确定方向,加上写程序花费了差不多一天的时间,虽然比较短小,但是整体的效果还是可以的,输入和翻译的流畅度在能接受的范围内。在程序中用到了QT的信号与槽机制、线程、定时器、Qt常用控件。

2019-03-18更新

1、优化线程处理方式。

2、解决网络连接失败界面无响应的问题。

3、优化中英文翻译自动进行装换,不需要手动切换。

4、新增清空输入按钮。

PyQt5--google快捷翻译相关推荐

  1. java如何解析图片里面文字_如何识别图片中的文字 讯飞输入法文字扫描快捷翻译教程...

    讯飞输入法是很多人都在用的一款手机输入法,它的功能是很全的.今天小编要和大家分享的是,如何使用文字扫描功能快速识别图片中文字,还能快捷翻译.希望能够帮助到大家远程办公. 以讯飞输入法Android版为 ...

  2. Google在线翻译(WinForm版)

    最近闲的无事,写了一个Google在线翻译的WinForm版,里面用到了webbrowser空间,本来是不想用这个空间的,但是直接POST提交数据上去,没办法得到返回信息,返回的信息一直为空,很是郁闷 ...

  3. Translatium for Mac(Google在线翻译工具)

    Translatium,谷歌翻译客户端 Translatium for Mac是一款Mac上强大的翻译软件,支持150多种语言和方言,支持语言输入翻译,文本翻译,并且支持相机翻译语言,Translat ...

  4. Delphi2010 的Google在线翻译

    Delphi的Google在线翻译 在Delphi 2010的IDE设置可参考: 附:DelphiGoogle翻译API 转载于:https://www.cnblogs.com/tulater/arc ...

  5. google翻译的用法 使用translate.google.com翻译整个网页内容

    对于文本的翻译有很多种方法,可以调用baidu翻译的接口,也可以调用google的翻译接口. 当然这里说的都是免费的,使用模拟用户的请求来达到翻译的目的. 今天要说的不是要翻译一个或几个keyword ...

  6. 用Google来翻译你的网页

    在 Google Translate 上面有个很实用的 browser bookmark,实际上是一段 js 脚本,用它可以将当前网页用 Google Translate 翻译成各种语言. 这段 js ...

  7. 利用Google在线翻译引擎制作自己的多国语言翻译机

    本文介绍如何利用Google在线翻译引擎来制作自己的多国语言翻译器.本程序利用Google的在线翻译引擎实现汉语到英语,英语到汉语,英语到日语的单词,整句的翻译.因为是在命令行运行,不支持/n,不能对 ...

  8. (转)利用Google在线翻译引擎制作自己的多国语言翻译机

    出处:http://www.blogjava.net/ekinglong/archive/2006/11/12/80704.html?Pending=true#Post 本文介绍如何利用Google在 ...

  9. python软件菜单翻译_制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)

    制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) 翻译软件上传到github上. 源码地址: 源码 软件截图 主要的思想 界面方面 界面主要采用PyQt5的QtDesigner来制作, ...

  10. python软件菜单翻译_制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)!

    制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) @(目录) 翻译软件上传到github上. 源码地址: 软件截图 主要的思想 界面方面 界面主要采用PyQt5的QtDesigner来 ...

最新文章

  1. RGB-D相机视觉SLAM
  2. nagios全攻略(三)----使用插件监控更多信息
  3. Spring AOP通知实例 – Advice
  4. 网页3D效果库Three.js学习[二]-了解照相机
  5. stl set求交集 并集 差集
  6. JavaScript编程知识
  7. MPI编程及性能优化
  8. 现代密码学5.4--对哈希函数的攻击
  9. npm安装serve实现静态资源的访问
  10. boost::put_get_helper用法的测试程序
  11. ThinkPHP多次重复提交问题的根源
  12. TortoiseGit与github实现项目的上传
  13. [转载] 2020最新Java面试题,常见面试题及答案汇总
  14. SQL Server的聚集索引和非聚集索引
  15. 分布式时序数据库InfluxDB
  16. 移动端滚动不流畅问题
  17. Tableau上面地图与条形图结合_Tableau 全新地图实战演示,更快、更高、更强
  18. SpringCloud常见面试题总结一
  19. 软件设计工程——数据库设计
  20. idea git push 码云: Remote: [31mYou do not have permission to push to the repository via HTTPS

热门文章

  1. (2021 最新版)IntelliJ IDEA 下载安装及配置教程
  2. c语言根据日期求星期蔡勒公式,利用蔡勒公式获得给定日期的星期数
  3. 9.郝斌C语言笔记——变量的作用域和存储方式
  4. 亲测有效,使用postman进行并发测试
  5. 图解电动汽车:电动汽车关键技术
  6. Android Studio新建项目
  7. 元宇宙的时代来不及解释了快上车
  8. 中国农村统计年鉴下载链接
  9. iMeta | 南医大余光创组ggtree最新文章-系统发育树存储与可视化的数据结构
  10. hp 126NW驱动安装