很早以前在阅读英文文章时,我们遇到难以理解的句子通常都是打开网页搜索翻译结果,但是就觉得每次需要打开网页好麻烦,所以就打算做一个能够帮助我们阅读英文文章的小软件,甚至是其他语种的文章。
这是我写完运行后的结果,翻译的结果一模一样。至于为什么选择谷歌?谷歌翻译的结果较之其他准确率还是蛮高的。
准备工作
我的python环境是3.7.0
我们需要这么几个库:tkinter、win32clipboard、pyttsx3、requests、json、exects。tkinter和json是python内置模块,而其他的需要我们手动pip安装,如pip install requests。
win32clipboard和exects我们无法直接安装,而是安装pywin32和pyecexjs,因为win32clipboard和exects是pywin32和pyecexjs的一部分。
正式开始
有了上面的工作,我们就可以开始我们的代码了。
我们先从简单的开始,获取剪切板的内容,剪切板的内容就是我们ctrl+c复制的内容。
获取剪切板内容的方法是win32clipboard库中的GetClipboardData()方法
接下来我们尝试把剪切板里的内容读出来。
engine用来接收pyttsx3.init()函数返回的对象,我们想要达到我们读目的,需要两个方法say()和runAndWait(),这里光是一个say()方法是不能让系统朗读文本的,say()方法需要一个参数,就是我们的文本内容。
getProperty()方法可以获取engine相对应的属性的值,比如语速rate,默认的语速是200,我们可以通过setProperty()方法进行设置。
speakinit函数只是一个返回我们自定义的朗读文本engine对象
接下来的工作就是实现翻译的功能。
查看请求头信息,发现是GET请求,URL中的q参数就是我们需要翻译的内容,至于其他参数暂时不知道什么意思就不管了,用requests.get()方法请求,打印请求的结果发现得到了翻译结果,但是我们将q的参数换成别的单词再一次请求发现报了403,请求失败了。
这是我在爬取谷歌翻译是遇到的最大难题,在网上搜到这篇文章解决了我的问题,但是我并没有完全理解,所以就不放代码了。
这是那篇文章的链接 利用python调用谷歌翻译API - 互联网
到此我们的软件只剩下最后的一部分GUI界面。
设置GUI界面很简单,这里就不在赘述,直接上代码。
采用的是tkinter库,也可以用pyqt来制作界面,据说pyqt制作的界面要好看一点。
但是我们发现当剪切板的内容发生改变时,显示翻译结果的label_2标签的内容不会发生改变,也就是说目前这个程序无法根据剪切板实时更新的内容进行翻译,所以我们需要定义一个让程序更新的函数。
至此我们的程序已经完成,运行之后就得到了最上面的结果图片,可以根据需要通过pyinstaller将程序进行打包生成exe文件。
以上代码只是部分代码。