python实现划词翻译


Posted in Python onApril 23, 2020

最近因为编程,需要大量地看一些说明文档,无奈说明文档都是英文的,可把我这个半桶水折腾死了,太多词汇不知道,一个个复制翻译太麻烦了。于是我根据自己的需要,用python写了一个划词翻译。

一、使用逻辑

由于我是看PDF文档,用的是一款轻量级的PDF阅读器(SumatraPDF),这款阅读器只有5M,但是阅读很舒服很流畅,渲染也很到位。但是没有其他阅读器有许多强大功能,比如说划词翻译。

我的想法是一旦发现我复制就可以在当前鼠标位置显示一个翻译结果框。基于这个想法,我一开始准备使用MFC编写,因为MFC能够轻易获得系统消息,钩子调用十分简单。可是我把检测复制,显示文本框都做好的时候,发现一个悲伤的事实,c++的http库实在是不怎么样,竟然无法访问http://地址,经过一晚的尝试——失败,这才打算使用python。???锣乱淮蠖眩?蚁衷诎盐业穆呒?迪掳伞?/p>

python实现划词翻译

二、需要引用的库

因为要联网所以需要urllib,解析网页需要json,读取剪切板数据需要win32clipboard,获得当前鼠标信息用PyMouse,生成文本框Tkinter,定时器time。python为什么强大,就在于集成库的易用性和多样性,有什么需要就pip install 装就行,这点比c++强太多了。

import urllib #http连接需要用到
import json #解析网页数据用
import win32clipboard as wc #读取剪切板数据
from pymouse import PyMouse #获得当前鼠标信息
import Tkinter   #自带的GUI库,生成文本框
import time   #定时器,减少占用

三、代码实现

我这里先定义了三个函数,方便后面实现功能,下面有详细解释和代码

#PyMouse得到的是2维字符串,但是tkinter生成窗体时需要的是类似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐标点。
def transMousePosition():
 m = PyMouse()
 return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1])
#获得剪切板数据 
def getCopyText():
 wc.OpenClipboard()
 copy_text = wc.GetClipboardData()
 wc.CloseClipboard()
 return copy_text
#返会是否有新的复制数据,cmp函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
def newCopyData():
 return cmp(currentData,str(getCopyText()))

主程序

if __name__ == '__main__':
 req_url = 'http://fanyi.youdao.com/translate' # 创建连接接口,这里是有道词典的借口
 # 创建要提交的数据
 currentData=str(getCopyText())
 Form_Date = {}
 Form_Date['doctype'] = 'json'
 while 1:
  if newCopyData():
   currentData=str(getCopyText())#取得当前剪切板数据
   Form_Date['i'] = currentData # 传递数据
   data = urllib.urlencode(Form_Date).encode('utf-8') #数据转换
   response = urllib.urlopen(req_url, data) #提交数据并解析
   html = response.read().decode('utf-8') #服务器返回结果读取
   translate_results = json.loads(html) #以json格式载入
   translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式调取
   position=transMousePosition()#取得当前鼠标位置
   top = Tkinter.Tk()#窗口初始化
   top.wm_attributes('-topmost',1)#置顶窗口
   top.geometry(position)#指定定位生成指定大小窗口
   e=Tkinter.Text()#生成文本框部件
   e.insert(1.0,translate_results)#插入数据
   e.pack()#将部件打包进窗口
   top.mainloop()# 进入消息循环
  currentData=str(getCopyText())
  time.sleep(1)

到此,我们划词翻译程序就已经完成了,虽然不太美观。而且美中不足的是我没有想到一个好的办法退出程序,相当于一个死循环在里面,只有强行退出,不知道谁有好办法能够解决这个问题

总结

如果要实现什么功能,python该是最好的胶水了,c++的http库实在是太坑了,浪费我好多小时。下面源代码附上,给大家参考

# -*- coding: utf-8 -*-
"""
Created on Sat Aug 11 08:24:48 2018

@author: ltengy
"""
import urllib #http连接需要用到
import json #解析网页数据用
import win32clipboard as wc #读取剪切板数据
from pymouse import PyMouse #获得当前鼠标信息
import Tkinter   #自带的GUI库,生成文本框
import time   #定时器,减少占用
currentData=''

#PyMouse得到的是2维字符串,但是tkinter生成窗体时需要的是类似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐标点。
def transMousePosition():
 m = PyMouse()
 return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1])
#获得剪切板数据 
def getCopyText():
 wc.OpenClipboard()
 copy_text = wc.GetClipboardData()
 wc.CloseClipboard()
 return copy_text
#返会是否有新的复制数据
def newCopyData():
 return cmp(currentData,str(getCopyText()))
if __name__ == '__main__':
 req_url = 'http://fanyi.youdao.com/translate' # 创建连接接口,这里是有道词典的借口
 # 创建要提交的数据
 currentData=str(getCopyText())
 Form_Date = {}
 Form_Date['doctype'] = 'json'
 while 1:
  if newCopyData():
   currentData=str(getCopyText())#取得当前剪切板数据
   Form_Date['i'] = currentData # 传递数据
   data = urllib.urlencode(Form_Date).encode('utf-8') #数据转换
   response = urllib.urlopen(req_url, data) #提交数据并解析
   html = response.read().decode('utf-8') #服务器返回结果读取
   translate_results = json.loads(html) #以json格式载入
   translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式调取
   position=transMousePosition()#取得当前鼠标位置
   top = Tkinter.Tk()#窗口初始化
   top.wm_attributes('-topmost',1)#置顶窗口
   top.geometry(position)#指定定位生成指定大小窗口
   e=Tkinter.Text()#生成文本框部件
   e.insert(1.0,translate_results)#插入数据
   e.pack()#将部件打包进窗口
   top.mainloop()# 进入消息循环
  currentData=str(getCopyText())
  time.sleep(1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的生成器和yield详细介绍
Jan 09 Python
Python中计算三角函数之cos()方法的使用简介
May 15 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
使用Python实现跳帧截取视频帧
May 31 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 Python
Python程序语言快速上手教程
Jul 18 #Python
python 图片验证码代码分享
Jul 04 #Python
Python查询Mysql时返回字典结构的代码
Jun 18 #Python
python 实现堆排序算法代码
Jun 05 #Python
python 实现归并排序算法
Jun 05 #Python
python 实现插入排序算法
Jun 05 #Python
python 算法 排序实现快速排序
Jun 05 #Python
You might like
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
修改发贴的编辑功能
2007/03/07 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
详解python statistics模块及函数用法
2019/10/27 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
应届大学生的推荐信
2013/11/20 职场文书
爱情保证书范文
2014/02/01 职场文书
授权委托书公证
2014/09/14 职场文书
庆元旦演讲稿
2014/09/15 职场文书
干部培训简讯
2015/07/20 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle