python实现划词翻译

article/2025/10/7 1:53:44

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

一:使用逻辑

由于我是看PDF文档,用的是一款轻量级的PDF阅读器(SumatraPDF),这款阅读器只有5M,但是阅读很舒服很流畅,渲染也很到位。但是没有其他阅读器有许多强大功能,比如说划词翻译。
我的想法是一旦发现我复制就可以在当前鼠标位置显示一个翻译结果框。基于这个想法,我一开始准备使用MFC编写,因为MFC能够轻易获得系统消息,钩子调用十分简单。可是我把检测复制,显示文本框都做好的时候,发现一个悲伤的事实,c++的http库实在是不怎么样,竟然无法访问http://地址,经过一晚的尝试——失败,这才打算使用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          #定时器,减少占用

三:代码实现

  1. 我这里先定义了三个函数,方便后面实现功能,下面有详细解释和代码
#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()))
  1. 主程序
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)

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

总结

如果要实现什么功能,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)

http://chatgpt.dhexx.cn/article/3L1jGjvk.shtml

相关文章

划词翻译简单实现

环境&#xff1a;archlinux &#xff0c;其余linux系统类似 安装依赖 sudo pacman -S xsel sudo pacman -S translate-shell sudo pacman -S libnotify脚本书写 创建脚本 touch word_translate.sh chmod x word_translate.sh vim word_tranlate.sh#!/bin/bashwhile true; d…

Chrome划词插件-有道词典

当我们在阅读文章&#xff0c;查找资料或者查看英文文献时&#xff0c;经常会遇到不认识的英文单词&#xff0c;这时&#xff0c;我们往往会复制单词百度一下才行。 其实&#xff0c;遇到这种情况&#xff0c;我们可以直接下载一个有道词典的Chrome划词插件&#xff0c;遇到需…

PDF划词翻译插件

PDF划词翻译插件 1、打开一个拓展插件的下载网站2、下载沙拉查词并安装3、进入详情&#xff0c;设置为允许打开文件网址4、固定她5、打开她的设置最终划词结果 1、打开一个拓展插件的下载网站 点击此网站地址 2、下载沙拉查词并安装 打开开发者模式&#xff0c;把下载好的.cr…

福昕pdf阅读器的划词翻译功能如何添加(图文并茂)

一、打开福昕阅读器 二、可在上方工具栏&#xff0c;点击“帮助”&#xff0c;关于福昕阅读器领鲜版查看安装的版本信息&#xff0c;如图1-1&#xff0c;图1-2 图1-1 图1-2 三、找到上方工具栏的图标按键&#xff0c;名为“自定义快速访问工具栏”&#xff0c;如图1-3&#…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介&#xff1a;谷歌浏览器自带的翻译功能&#xff0c;对我们来说用处很大&#xff0c;但有的时候突然就会变成“无法翻译此网页”&#xff0c;之前给大家提供过两种无法翻译此网页的解决方案&#xff0c;这次再给大家分享下两款别的翻译方法&#xff1b; 一、上次介绍&#x…

关于网页划词翻译

2013-4-21 近日偶然看到js页面文字选中后分享到新浪微博实现&#xff0c;发现原来竟然只要一句话就可以实现获取划词。便萌生自己写个划词翻译的东东&#xff0c;方便自己看文档。 我首先想到了之前看到的油猴插件&#xff0c;最早是在看优酷去广告插件的原理时知道这个东西。感…

基于Edge浏览器的沙拉划词插件使用教程(好用的翻译插件)

1.使用目的 - 使用沙拉划词实现网页多种翻译源进行实时翻译。 - 使用沙拉划词实现PDF翻译。 2.安装方法 2.1 打开edge扩展 点击工具栏右侧… 然后点击扩展 进入扩展 2.2 下载沙拉划词 2.2.1 点击获取扩展 2.2.2点击搜索 搜索沙拉划词 回车搜索 正常获取并添加扩展 出现沙…

PDF划词翻译软件

PDF划词翻译 一个简单的PDF划词翻译软件。 Github仓库地址&#xff1a;https://github.com/WCX1024979076/simple_pdf_translator Github下载地址&#xff1a; https://github.com/WCX1024979076/simple_pdf_translator/releases/tag/v0.1.0 Gitee仓库地址&#xff1a; htt…

推荐一个谷歌浏览器插件:划词翻译

地址&#xff1a;划词翻译插件 最近在看一些英文文档&#xff0c;遇到了一些词汇不认识&#xff0c;在谷歌浏览器上找到了这个翻译插件 谷歌浏览器自己有一个全文翻译的功能&#xff0c;对于一些技术类文档&#xff0c;有些词如果翻译错误了就会闹出笑话来&#xff0c;限于对…

一个简单的划词翻译工具

一个简单的划词翻译工具 看论文时经常要翻译&#xff0c;然而手动复制粘贴到翻译网站上又很麻烦&#xff0c;有些划词翻译工具比如有道的划词和取词&#xff0c;虽然不用按快捷键只选中文本就能翻译&#xff0c;但有时也会失灵什么的&#xff0c;于是就自己用python写了个调用百…

安装侧边翻译,划词翻译,看外文论文神器,比知云还好用Edge Translate

前言 写论文相信大家参考的大多数都是外文文献&#xff0c;但是想我这样英文水平不佳的小伙伴还是比较多的&#xff0c;所以看外文文献就很费劲。 有的小伙伴用谷歌或者百度翻译 一边复制翻译一边看&#xff0c; 后来用知云翻译方便的很多&#xff0c;但是每次…

论文阅读利器——划词翻译插件(桌面与浏览器)

对于喜爱学习&#xff0c;阅读文献的各位来说&#xff0c;满屏的英文字母常常会磨灭我们的热情&#xff0c;而一般的翻译软件又有些贵&#xff0c;或者是根本没有很好的效果。 那么&#xff0c;今天&#xff0c;在这里介绍几款开源的插件与软件。都是可以免费使用的。 一、Edg…

5个超好用的屏幕划词翻译软件,选中文字就能翻译

分享5个划词翻译工具&#xff0c;支持翻译多种语言&#xff0c;并且有多种翻译源和词典可以选择&#xff01; 一、划词翻译插件 1、Talent划词翻译 一个好用的划词翻译插件&#xff0c;支持Chrome、Edge、360等主流浏览器&#xff0c;安装之后选中词汇或者短句就会自动进行翻译…

递归算法整理合集

递归算法整理合集 ​递归是常见的算法和编程思想&#xff0c;也是初学者几乎最早接触的算法思想之一。递归算法的优点是代码简洁清晰&#xff0c;逻辑简单易懂&#xff1b;缺点一是算法运行复杂度较高&#xff0c;二是容易在具体代码实现的时候调用栈的层次考虑不周&#xff0…

【关于递归算法的讲解】

递归算法 递归算法的思想 利用递归求解问题的三个特性 递归算法求解的执行过程 递推关系 递归算法的应用举例 小结 递归算法 递归算法是一种通过自身调用自身或间接调用自身来达到问题解决的算法。递归的基本思想是把一个要求解的问题划分成一个或多个规模更小的子问题…

递归算法即案例

递归&#xff08;recursion&#xff09;&#xff1a;程序调用自身的编程技巧。 递归满足2个条件&#xff1a; 1. 有反复执行的过程&#xff08;调用自身&#xff09; 2. 有跳出反复执行过程的条件&#xff08;递归出口&#xff09; 项目中用到递归案例 递归读取文件获取字典…

【递归算法】递归算法的快速入门

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时还是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;数据结构与算法 &#x1f980;专栏简介&#xff1a;图解经典算法&#xff0c;C#代…

递归算法详细解析

递归 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时&#xff0c;递归前…

递归算法详解

递归&#xff08;英语&#xff1a;recursion&#xff09;在电脑科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 0、前言 递归其实和循环是非常像的&#xff0c;循环都可以改写成递归&#xff0c;递归未必能改写成循环&#xff0c;这是一个充分不必要的条…

递归算法及经典递归实现

递归 递归就是方法自己调用自己&#xff0c;每次调用时传入不同的变量&#xff0c;递归有助于编程者解决复杂的问题&#xff0c;同时可以让代码变得简洁。 递归&#xff1a; 在定义自身的同时又出现了对自身的调用 直接递归函数&#xff1a; 在定义函数体中直接调用自己 间接…