简易翻译器
简单的Introduction
- 先说说这个工具我们将会用到的python库:
-
import tkinter as tk import requests
- 用到tkinter是因为我们在后面会做一个UI界面,为什么会用tkinter,而不用pyqt5呢,一个简单的原因,因为简单,哈哈哈。
- 用requests库是因为我们需要向有道的官网发送一个post请求,获取返回的数据,这里会用到一点点网络爬虫的东西,不懂的可以自学一下。
- 废话不多说,开干!!!
代码部分
(1)爬虫部分
- 有道翻译的网址:http://fanyi.youdao.com/translate?smartresult=dict,rule
- translate函数
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0'}
def translate(ke):
url = 'http://fanyi.youdao.com/translate?smartresult=dict,rule'
data = {
'i':ke,
'doctype':'json'
}
res = requests.post(url, data=data, headers=headers)
code = res.status_code
if code == 200:
res_data = res.json()
if res_data['errorCode'] == 0:
return res_data['translateResult'][0][0]["tgt"]
ke:需要翻译的字符串,比如说(你好)。
(2)开始进入我们的UI部分
- 可以看见上图有8个控件:
2个按钮控件,2个Text,2个scrollbar,2个Label标签。 - 直接上代码:
class Mywindow():
def __init__(self):
self.root = tk.Tk()
self.root.geometry("600x400")
self.root.title("简易翻译器")
self.root.config(bg="SkyBlue")
self.root.iconphoto(False, tk.PhotoImage(file='1.png'))
self.label1 = tk.Label(self.root, text="原文:", font="宋体").place(x=0, y=0)
self.text1 = tk.Text(self.root, height=6, font="宋体")
self.text2 = tk.Text(self.root, height=6, font="宋体")
self.scr1 = tk.Scrollbar(self.text1, width=10)
self.scr1.pack(side=tk.RIGHT, fill=tk.Y)
self.scr1.config(command=self.text1.yview)
self.scr2 = tk.Scrollbar(self.text2, width=10)
self.scr2.pack(side=tk.RIGHT, fill=tk.Y)
self.scr2.config(command=self.text2.yview)
self.text1.config(yscrollcommand=self.scr1.set)
self.text2.config(yscrollcommand=self.scr2.set)
self.text1.bind('<Control-Up>', self.ok1)
self.text1.bind('<Control-Down>', self.btn2_del1)
self.btn1 = tk.Button(self.root, text="确定", activeforeground='blue',
activebackground='yellow', command=self.ok).place(x=540, y=50, width=50, height=30)
self.btn2 = tk.Button(self.root, text='清除', command=self.btn2_del,
activeforeground='blue', activebackground='yellow').place(x=540, y=120, width=50, height=30)
self.label2 = tk.Label(self.root, text="译文:", font="宋体").place(x=0, y=170)
self.menu = tk.Menu(self.root,
tearoff=False,
# bg="black",
)
self.menu.add_command(label="剪切", command=self.cut)
self.menu.add_command(label="复制", command=self.copy)
self.menu.add_command(label="粘贴", command=self.paste)
self.root.bind("<Button-3>", self.popup)
self.pack()
# self.btn2.bind("<Button-1>", self.btn2_del())
self.root.mainloop()
def ok(self):
text = self.text1.get("1.0", "end")
ts_text = translate(text)
self.text2.insert('insert', ts_text)
def ok1(self, e):
text = self.text1.get("1.0", "end")
ts_text = translate(text)
self.text2.insert('insert', ts_text)
def btn2_del(self):
self.text1.delete("1.0", "end")
self.text2.delete("1.0", "end")
def btn2_del1(self, e):
self.text1.delete("1.0", "end")
self.text2.delete("1.0", "end")
def cut(self, event=None):
self.text1.event_generate("<<Cut>>")
self.text2.event_generate("<<Cut>>")
def copy(self, event=None):
self.text1.event_generate("<<Copy>>")
self.text2.event_generate("<<Copy>>")
def paste(self, event=None):
self.text1.event_generate('<<Paste>>')
self.text2.event_generate('<<Paste>>')
def popup(self, event):
self.menu.post(event.x_root, event.y_root)
def pack(self):
self.text1.place(x=20, y=40, width=500, height=120)
self.text2.place(x=20, y=200, width=500, height=120)
- 代码有点乱哈,不过会tkinter的应该都能看懂。
- 这里我设置了两个快捷键,ctrl+上建(up)是确定,ctrl+下键是清除。
- 而且有右键菜单支持复制,粘贴,剪切。
- 现在有个小缺陷,就是控件的大小不能随着窗体的变化而变化。这个很简单,大家可以自己修改参数。
- 窗体的图标可以自己设置哈,支持png,大家尽量下载png,或icon的图标,别问为什么,问就是博主的亲身经历。
|