pythoncom.pumpmessages()_用python做一个划词翻译软件
在我们学习的时候,在我们查找文档的时候,很多内容都是英文的,如果你的英文不好,就很难去阅读这篇文章,语言不通是我们学习的最大的绊脚石,虽然谷歌浏览器有翻译的功能,翻译出来的效果也是挺不错,但是这样子阅读文章并不能对我们的工作学习起到帮助,反倒是机械化的翻译有可能会是你的中文水平下降,阅读一篇外国文章,最重要的就是对每个单词的理解,如果单词的意思都不懂,更不要想去理解文章的意思了。
因此这里做了一个划词翻译的小软件,鼠标选中文本就可以翻译出来。
例如,在阅读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可视化一下,在将其打包,这样就是一个划词翻译软件了。
就这样,在日常的使用中也是非常便利的,只需要用鼠标选取一下,它就显示出单词的翻译结果。
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
