一个极简的翻译前端

嗯……不知道为啥脑残地写了这个极简的翻译器

功能

就是调用百度翻译的API了,输入框没有东西的时候按回车窗口跑到鼠标处,输入框里是q的时候按回车退出。

源码

主要用到了了调用百度翻译,python前端包tkinter,以及检测鼠标键盘的包pyautogui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from tkinter import *
import pyautogui as pag
import sys

def baidu_traslate(
q='apple', toLang='zh',
fromLang='auto',
appid='***********',
secretKey='***************',
):
import requests
import random
import hashlib
import json
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
salt = random.randint(32768, 65536)

sign = appid + q + str(salt) + secretKey
m = hashlib.md5(sign.encode('utf-8'))
sign = m.hexdigest()

url = url + \
'?appid=' + appid + \
'&q=' + q + \
'&from=' + fromLang + \
'&to=' + toLang + \
'&salt=' + str(salt) + '&sign=' + sign
try:
text = requests.get(url).text
ret_dict = json.loads(text)
ret_dict['src'] = ret_dict['trans_result'][0]['src']
ret_dict['dst'] = ret_dict['trans_result'][0]['dst']
ret_dict.pop('trans_result')
return ret_dict
except:
return {'dst': ''}


class MyWindow(Frame):

x, y = 1000, 80

def operate(self, event):
src = self.input.get()
if src == '':
self.x, self.y = pag.position()
self.root.geometry("+%d+%d" % (self.x, self.y))
elif src == 'q':
sys.exit()
else:
dst = baidu_traslate(src)['dst']
# print(dst)
self.ouput.delete(0, 'end')
self.ouput.insert(0, dst)

def __init__(self, root=None):
self.root = root
self.root.wm_attributes('-topmost', 1)
self.root.overrideredirect(True)
self.root.geometry("+%d+%d" % (self.x, self.y))
Frame.__init__(self, self.root)

self.input = Entry(root)
self.input.bind('<Return>', self.operate)
self.input.pack()

self.ouput = Entry(root)
self.ouput.pack()


root = MyWindow(Tk())
root.mainloop()

关于打包

第一次将python源代码打包为exe,用到的包是pyinstaller。用到的语句是

1
pyinstaller -F 源文件.py -w

其中-F打包为一个exe文件,-w表示在运行的时候不需要dos界面。

需要注意的是即便是一个很小的程序,因为这个包会把所有python环境的包打包进来,就导致十分地累赘。正确的做法是在anaconda中新建一个纯净的环境,需要什么包就安装什么,然后再调用pyinstaller,这样该程序从300M下降到10M。