最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)劃詞翻譯

 更新時(shí)間:2020年04月23日 16:01:56   作者:踢飛足球  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)劃詞翻譯功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近因?yàn)榫幊?,需要大量地看一些說(shuō)明文檔,無(wú)奈說(shuō)明文檔都是英文的,可把我這個(gè)半桶水折騰死了,太多詞匯不知道,一個(gè)個(gè)復(fù)制翻譯太麻煩了。于是我根據(jù)自己的需要,用python寫(xiě)了一個(gè)劃詞翻譯。

一、使用邏輯

由于我是看PDF文檔,用的是一款輕量級(jí)的PDF閱讀器(SumatraPDF),這款閱讀器只有5M,但是閱讀很舒服很流暢,渲染也很到位。但是沒(méi)有其他閱讀器有許多強(qiáng)大功能,比如說(shuō)劃詞翻譯。

我的想法是一旦發(fā)現(xiàn)我復(fù)制就可以在當(dāng)前鼠標(biāo)位置顯示一個(gè)翻譯結(jié)果框?;谶@個(gè)想法,我一開(kāi)始準(zhǔn)備使用MFC編寫(xiě),因?yàn)镸FC能夠輕易獲得系統(tǒng)消息,鉤子調(diào)用十分簡(jiǎn)單??墒俏野褭z測(cè)復(fù)制,顯示文本框都做好的時(shí)候,發(fā)現(xiàn)一個(gè)悲傷的事實(shí),c++的http庫(kù)實(shí)在是不怎么樣,竟然無(wú)法訪問(wèn)http://地址,經(jīng)過(guò)一晚的嘗試——失敗,這才打算使用python。啰啰嗦嗦一大堆,我現(xiàn)在把我的邏輯說(shuō)下吧。

二、需要引用的庫(kù)

因?yàn)橐?lián)網(wǎng)所以需要urllib,解析網(wǎng)頁(yè)需要json,讀取剪切板數(shù)據(jù)需要win32clipboard,獲得當(dāng)前鼠標(biāo)信息用PyMouse,生成文本框Tkinter,定時(shí)器time。python為什么強(qiáng)大,就在于集成庫(kù)的易用性和多樣性,有什么需要就pip install 裝就行,這點(diǎn)比c++強(qiáng)太多了。

import urllib #http連接需要用到
import json #解析網(wǎng)頁(yè)數(shù)據(jù)用
import win32clipboard as wc #讀取剪切板數(shù)據(jù)
from pymouse import PyMouse #獲得當(dāng)前鼠標(biāo)信息
import Tkinter   #自帶的GUI庫(kù),生成文本框
import time   #定時(shí)器,減少占用

三、代碼實(shí)現(xiàn)

我這里先定義了三個(gè)函數(shù),方便后面實(shí)現(xiàn)功能,下面有詳細(xì)解釋和代碼

#PyMouse得到的是2維字符串,但是tkinter生成窗體時(shí)需要的是類(lèi)似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐標(biāo)點(diǎn)。
def transMousePosition():
 m = PyMouse()
 return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1])
#獲得剪切板數(shù)據(jù) 
def getCopyText():
 wc.OpenClipboard()
 copy_text = wc.GetClipboardData()
 wc.CloseClipboard()
 return copy_text
#返會(huì)是否有新的復(fù)制數(shù)據(jù),cmp函數(shù)用于比較2個(gè)對(duì)象,如果 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' # 創(chuàng)建連接接口,這里是有道詞典的借口
 # 創(chuàng)建要提交的數(shù)據(jù)
 currentData=str(getCopyText())
 Form_Date = {}
 Form_Date['doctype'] = 'json'
 while 1:
  if newCopyData():
   currentData=str(getCopyText())#取得當(dāng)前剪切板數(shù)據(jù)
   Form_Date['i'] = currentData # 傳遞數(shù)據(jù)
   data = urllib.urlencode(Form_Date).encode('utf-8') #數(shù)據(jù)轉(zhuǎn)換
   response = urllib.urlopen(req_url, data) #提交數(shù)據(jù)并解析
   html = response.read().decode('utf-8') #服務(wù)器返回結(jié)果讀取
   translate_results = json.loads(html) #以json格式載入
   translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式調(diào)取
   position=transMousePosition()#取得當(dāng)前鼠標(biāo)位置
   top = Tkinter.Tk()#窗口初始化
   top.wm_attributes('-topmost',1)#置頂窗口
   top.geometry(position)#指定定位生成指定大小窗口
   e=Tkinter.Text()#生成文本框部件
   e.insert(1.0,translate_results)#插入數(shù)據(jù)
   e.pack()#將部件打包進(jìn)窗口
   top.mainloop()# 進(jìn)入消息循環(huán)
  currentData=str(getCopyText())
  time.sleep(1)

到此,我們劃詞翻譯程序就已經(jīng)完成了,雖然不太美觀。而且美中不足的是我沒(méi)有想到一個(gè)好的辦法退出程序,相當(dāng)于一個(gè)死循環(huán)在里面,只有強(qiáng)行退出,不知道誰(shuí)有好辦法能夠解決這個(gè)問(wèn)題

總結(jié)

如果要實(shí)現(xiàn)什么功能,python該是最好的膠水了,c++的http庫(kù)實(shí)在是太坑了,浪費(fèi)我好多小時(shí)。下面源代碼附上,給大家參考

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

@author: ltengy
"""
import urllib #http連接需要用到
import json #解析網(wǎng)頁(yè)數(shù)據(jù)用
import win32clipboard as wc #讀取剪切板數(shù)據(jù)
from pymouse import PyMouse #獲得當(dāng)前鼠標(biāo)信息
import Tkinter   #自帶的GUI庫(kù),生成文本框
import time   #定時(shí)器,減少占用
currentData=''

#PyMouse得到的是2維字符串,但是tkinter生成窗體時(shí)需要的是類(lèi)似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐標(biāo)點(diǎn)。
def transMousePosition():
 m = PyMouse()
 return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1])
#獲得剪切板數(shù)據(jù) 
def getCopyText():
 wc.OpenClipboard()
 copy_text = wc.GetClipboardData()
 wc.CloseClipboard()
 return copy_text
#返會(huì)是否有新的復(fù)制數(shù)據(jù)
def newCopyData():
 return cmp(currentData,str(getCopyText()))
if __name__ == '__main__':
 req_url = 'http://fanyi.youdao.com/translate' # 創(chuàng)建連接接口,這里是有道詞典的借口
 # 創(chuàng)建要提交的數(shù)據(jù)
 currentData=str(getCopyText())
 Form_Date = {}
 Form_Date['doctype'] = 'json'
 while 1:
  if newCopyData():
   currentData=str(getCopyText())#取得當(dāng)前剪切板數(shù)據(jù)
   Form_Date['i'] = currentData # 傳遞數(shù)據(jù)
   data = urllib.urlencode(Form_Date).encode('utf-8') #數(shù)據(jù)轉(zhuǎn)換
   response = urllib.urlopen(req_url, data) #提交數(shù)據(jù)并解析
   html = response.read().decode('utf-8') #服務(wù)器返回結(jié)果讀取
   translate_results = json.loads(html) #以json格式載入
   translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式調(diào)取
   position=transMousePosition()#取得當(dāng)前鼠標(biāo)位置
   top = Tkinter.Tk()#窗口初始化
   top.wm_attributes('-topmost',1)#置頂窗口
   top.geometry(position)#指定定位生成指定大小窗口
   e=Tkinter.Text()#生成文本框部件
   e.insert(1.0,translate_results)#插入數(shù)據(jù)
   e.pack()#將部件打包進(jìn)窗口
   top.mainloop()# 進(jìn)入消息循環(huán)
  currentData=str(getCopyText())
  time.sleep(1)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

天门市| 土默特右旗| 获嘉县| 河池市| 广安市| 平山县| 玉环县| 垦利县| 黄冈市| 长寿区| 乳山市| 阿拉善盟| 奎屯市| 东阳市| 南昌市| 托里县| 清苑县| 瑞昌市| 黎平县| 沁源县| 台北市| 顺义区| 江阴市| 涞水县| 吐鲁番市| 滦平县| 白玉县| 蚌埠市| 阿克陶县| 鄂托克旗| 肃北| 蒲江县| 鞍山市| 德昌县| 诸暨市| 北川| 石渠县| 同德县| 景德镇市| 旺苍县| 新竹县|