在我们学习的时候,在我们查找文档的时候,很多内容都是英文的,如果你的英文不好,就很难去阅读这篇文章,语言不通是我们学习的最大的绊脚石,虽然谷歌浏览器有翻译的功能,翻译出来的效果也是挺不错,但是这样子阅读文章并不能对我们的工作学习起到帮助,反倒是机械化的翻译有可能会是你的中文水平下降,阅读一篇外国文章,最重要的就是对每个单词的了解,理解,如果单词的意思都不懂,更不要想去理解文章的意思了。
因此这里做了一个划词翻译的小软件,我们的鼠标选中的文本并翻译出来。
例如,在阅读qt帮助的时候,碰到生词:
这里用到的东西挺多的,有获取鼠标事件,接着调用键盘事件,然后调用爬虫去爬取百度翻译的结果,接着用tkinter显示出来。
获取鼠标事件,这里用到的是pyhook,用来判断鼠标点击事件,pyhook的安装比较复杂,普通的pip并不能够安装,需要去这个网站下载pyhook的whl https://www.lfd.uci.edu/~gohlke/pythonlibs/
下载好包后,在命令行窗口输入pip install 包的地址+包名。
使用pyhook的一般方法如下:
def main():
# 创建管理器
hm = pyWinhook.HookManager()
# 监听键盘
hm.KeyDown = onKeyboardEvent
hm.HookKeyboard()
# 监听鼠标
hm.MouseAll = onMouseEvent
hm.HookMouse()
# 循环监听
pythoncom.PumpMessages()
其中有两个函数就是用来处理获得的事件的方法,需要定义相应的函数
例如键盘监听:
def onKeyboardEvent(event):
#print(event.Key) # 返回按下的键
if event.Key == 'Q':
event = quit()
return True
这个函数的意思是,如果接收到键盘按下Q,那么结束循环监听,程序结束
获得鼠标事件的函数:
def onMouseEvent(event):
if (event.MessageName != "mouse move"): # 因为鼠标一动就会有很多mouse move,所以把这个过滤下
if event.MessageName == 'mouse left up':
pyautogui.hotkey('ctrl','c') #如果鼠标点击则按下ctrl+c
s = pyperclip.paste()
global key
global v
try:
key,v =getword(s) #调用爬虫获得翻译的结果
except:
key = 'null'
v = 'null'
return True # 为True才会正常调用,如果为False的话,此次事件被拦截
上面的鼠标函数中有一个pyautogui库里的热键函数,关于pyautogui可以到这里查看python---很多行代码做一个自动打开软件的程序。
这里实现的是获得鼠标选取的内容,紧接着传递给爬虫,然后将翻译的结果返回到key和v,之中。
关于爬取百度翻译的,主要是利用post方法获得翻译的json数据,在对json数据解析,提取翻译的结果。
def request_translate(self):
"""
向百度请求 json 数据
:return: 向百度请求的 json 数据 """
data = self.get_post_data()
try:
response_0 = requests.request(method="post", url=self.url_0, headers=self.headers, data=data).json()except Exception: # 进行数据请求的任何异常处理
response_0 = ''
try:
response_1 = requests.request(method="post", url=self.url_1, headers=self.headers, data=data).json()except Exception: # 进行数据请求的任何异常处理
response_1 = ''
return response_0, response_1
在最后翻译结果获取到了,在利用pytkinter可视化一下,在将其打包,这样就是一个划词翻译软件了。
就这样,在日常的使用中也是非常便利的,只需要用鼠标选取一下,它就显示出单词的翻译结果。
因为篇幅有限,不能够全部贴代码出来,如果有需要的话可以在这里下载自行尝试一下,因为用到的库很多,所以这个软件的大小有60多M,当然打包之后使用便利,直接运行程序也是可以有一样的效果的。
代码下载链接:https://pan.baidu.com/s/1M03TD1fJYU0C3uBuStUEow