用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可视化一下,在将其打包,这样就是一个划词翻译软件了。

就这样,在日常的使用中也是非常便利的,只需要用鼠标选取一下,它就显示出单词的翻译结果。


因为篇幅有限,不能够全部贴代码出来,如果有需要的话可以在这里下载自行尝试一下,因为用到的库很多,所以这个软件的大小有60多M,当然打包之后使用便利,直接运行程序也是可以有一样的效果的。

代码下载链接:https://pan.baidu.com/s/1M03TD1fJYU0C3uBuStUEow

本文分享自微信公众号 - 孤独的S(sjw_980305)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程微刊

ajax+json实现echarts多个统计图显示

前端时常会遇到这样的问题,有一个单独的模块用作统计图,将多个折线或者柱状图,混合使用,下面的例子是用ajax+json模拟了调用接口实现echarts多个统计图...

12320
来自专栏光城(guangcity)

Scrapy框架之爬取城市天气预报

1.项目初始化2.提取数据 2.1 原理分析 2.2 数据抽取 2.3 自定义spider3.存储数据 3.1 修改settings.py 3.2 数据存储4....

23550
来自专栏光城(guangcity)

知难而上,砥砺前行

0.说在前面1.数据处理2.Apoc导入3.Neo4J导入展示4.Web开发5.动态交互可视化6.可视化展示7.作者的话

8840
来自专栏测试开发社区

有赞全链路压测实战

有赞致力于成为商家服务领域里最被信任的引领者,因为被信任,所有我们更需要为商家保驾护航,保障系统的稳定性。有赞从去年开始通过全链路压测,模拟大促真实流量,串联线...

20020
来自专栏测试开发社区

自研接口测试平台(Django2+Bootstrap3+Unittest)

断言配置提供了4种方式,状态码,正则加字典的方式,jsonpath,数据库字段值的校验。比对方式也提供了多种选择,有等于,不等于,包含,不包含在列表中等等。

11330
来自专栏测试开发社区

Python的Flask框架开发RESTful API

运行python app.py,Flask自带的Server在端口5000上监听:

11310
来自专栏Android 技术栈

由于Gson转换导致int转换成double的问题,使用fastjson替代

用了几种方式尝试解决无效,得知后台是用的fastjson,于是使用fastjson替代。

25020
来自专栏测试开发社区

django Highcharts制作图表--显示CPU使用率

Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表

13330
来自专栏吉林乌拉

设计模式之策略模式

今天和大家分享一下设计模式中的策略模式,这里只是分享楼主自己的见解,如有考虑不恰当的地方,还请理解,那么我们言归正传。由于楼主自己工作的原因,常常需要将数据库中...

8220
来自专栏测试开发社区

Lego:美团点评接口自动化测试实践

我认为,一个“好的”自动化测试项目,需要从“时间”、“人力”、“收益”这三个方面出发,做好“取舍”。

26030

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励