# coding=utf-8
from pynput.mouse import Listener, Button
from pynput.keyboard import Key, Controller
import http.client
import hashlib
import urllib
import random
import json
import pyautogui as pg
import operator
import threading
import os
import signal
import configparser
import time
import tkinter #GUI,生成文本框
import pandas.io.clipboard as cb
MODE_NONE = 0
MODE_USE = 1
MODE_PRESS_NONE = 0
MODE_PRESS_EXIT = 1
screen_width, screen_height = pg.size()
appid = ''
secretKey = ''
cope_run = 50
class AutoCopier():
__press_xy = (0, 0) # 私有变量 鼠标左键按下的位置
def __init__(self):
self.keyboard = Controller() # 初始化控制器
self.listener = Listener(on_click=self.on_click) # 初始化鼠标监听器
self.listener.start() # 开启鼠标监听器进程
# 百度appid和密钥需要通过注册百度【翻译api平台】后取得
self.appid = appid
self.secretKey = secretKey
#print(str(appid))
#print(str(secretKey))
self.httpClient = None
self.myurl = '/api/trans/vip/translate' # 通用翻译API HTTP地址
self.fromLang = 'auto' # 原文自动识别语种
self.toLang = 'zh' # 翻译为中文
self.salt = random.randint(32768, 65536)
self.datatmp_old = cb.paste()
self.datatmp = cb.paste()
self.mouse_x = 0
self.mouse_y = 0
self.top = None
self.top_true = None
self.mode = MODE_NONE
self.exit_mode = MODE_PRESS_EXIT
self.root = tkinter.Tk()
self.root.geometry("300x150")
self.root.title("开关")
#开关翻译button
var = tkinter.StringVar()
r1 = tkinter.Radiobutton(self.root, text='1.开启划词翻译功能',
variable=var, value='USE',
command=self.set_start)
r1.pack()
r2 = tkinter.Radiobutton(self.root, text='1.关闭划词翻译功能',
variable=var, value='NONE',
command=self.set_stop)
r2.pack()
var.set('NONE')
#鼠标随意点击关闭翻译框button
var_press = tkinter.StringVar()
r1_press = tkinter.Radiobutton(self.root, text='2.随意左键关闭翻译框',
variable=var_press, value='USE',
command=self.set_press_exit)
r1_press.pack()
r2_press = tkinter.Radiobutton(self.root, text='2.需要手动关闭翻译框',
variable=var_press, value='NONE',
command=self.set_press_none)
r2_press.pack()
var_press.set('USE')
self.root.protocol('WM_DELETE_WINDOW',self.exit)
self.root.mainloop()
def exit(self):
pid = os.getpid() # 获取当前进程的PID
os.kill(pid, signal.SIGTERM)
def set_start(self):
global cope_run
self.mode = MODE_USE
cope_run = 50
def set_stop(self):
global cope_run
self.mode = MODE_NONE
cope_run = 0
def set_press_exit(self):
self.exit_mode = MODE_PRESS_EXIT
def set_press_none(self):
self.exit_mode = MODE_PRESS_NONE
# 鼠标点击函数
def on_click(self, x, y, button, pressed):
global cope_run
if self.mode == MODE_USE:
if cope_run != 0:
if button == Button.left: # 鼠标左键点击
if pressed: # 鼠标左键按下
self.__press_xy = (x, y) # 获取当前鼠标位置
else: # 鼠标左键松开
if self.__press_xy != (x, y): # 按下位置和松开位置不一致
self.mouse_x = x
self.mouse_y = y
self.copy() # 说明操作是拷贝,进行复制函数
if operator.ne(self.datatmp,self.datatmp_old):
#self.thread_it(self.translate(),self)
self.translate() # 开始翻译
self.datatmp_old = self.datatmp
else:
if self.exit_mode == MODE_PRESS_EXIT:
if button == Button.left: # 鼠标左键点击关闭翻译框
if pressed:
self.destroy_tk()
# 复制函数
def copy(self):
with self.keyboard.pressed(Key.ctrl): # 按下ctrl,with语句结束后自动松开
self.keyboard.press('c') # 按下c
self.keyboard.release('c') # 松开c
time.sleep(0.1)
self.datatmp = cb.paste()
#翻译函数
def translate(self):
global cope_run
self.salt = random.randint(32768, 65536)
# 翻译内容,q存放
q = self.datatmp # 读取剪切板中的内容
q = q.replace('\r', '').replace('\n', '').replace('\t', '')
sign = self.appid + q + str(self.salt) + self.secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
self.myurl = self.myurl + '?appid=' + self.appid + '&q=' + urllib.parse.quote(q) + '&from=' + self.fromLang + \
'&to=' + self.toLang + '&salt=' + str(self.salt) + '&sign=' + sign
if self.mouse_x < 50:
self.mouse_x = 50
elif self.mouse_x > screen_width - 250:
self.mouse_x = screen_width - 250
if self.mouse_y <= 100:
self.mouse_y = 150
elif self.mouse_y >= screen_height - 180:
self.mouse_y = screen_height - 180
position = "200x80+" + str(self.mouse_x) + "+" + str(self.mouse_y)
if self.top_true == None:
cope_run = 0
self.top_true = True
self.top = tkinter.Tk()#窗口初始化
self.top.wm_attributes('-topmost',1)#置顶窗口
self.top.geometry(position)#指定定位生成指定大小窗口
etmp=tkinter.Text(self.top)#生成文本框部件
#print(self.myurl)
# 建立会话,返回结果
try:
self.httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
self.httpClient.request('GET', self.myurl)
# response是HTTPResponse对象
response = self.httpClient.getresponse()
result_all = response.read().decode("utf-8")
result = json.loads(result_all)
print(result)
if "trans_result" in result:
etmp.insert(1.0,result['trans_result'][0]['dst'])#插入数据
etmp.config(state='disable')
etmp.pack()#将部件打包进窗口
self.top.protocol('WM_DELETE_WINDOW',self.destroy_tk)
self.top.mainloop()# 进入消息循环
elif "error_code" in result:
etmp.insert(1.0,self.__error_code_parse(result))#插入数据
etmp.config(state='disable')
etmp.pack()#将部件打包进窗口
self.top.protocol('WM_DELETE_WINDOW',self.destroy_tk)
self.top.mainloop()# 进入消息循环
#print (result)
except Exception as e:
print (e)
finally:
if self.httpClient:
self.httpClient.close()
self.myurl = '/api/trans/vip/translate' # 通用翻译API HTTP地址
time.sleep(0.01)
d
没有合适的资源?快使用搜索试试~ 我知道了~
python划词翻译,auto转为中文
共2个文件
py:1个
exe:1个
需积分: 0 0 下载量 198 浏览量
2024-01-11
19:03:00
上传
评论 1
收藏 40.42MB 7Z 举报
温馨提示
需要输入自己的百度翻译id和key 鼠标左键按住选择需要翻译的内容,松开后自动Ctrl C然后读取剪切板数据去翻译 压缩包中有源码和打包好的exe文件,可自行修改
资源推荐
资源详情
资源评论
收起资源包目录
python划词翻译.7z (2个子文件)
python划词翻译
划词翻译.py 12KB
划词翻译.exe 41.07MB
共 2 条
- 1
资源评论
ADRNS
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功