# 实现模拟有道翻译 # coding:utf-8 from tkinter import * import requests # 有道翻译 class YouDao: def __init__(self): pass def fanyi(self, content): # translate_o改成translate,可防止返回:{'errorCode': 50} # url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' headers = { 'referer': 'http://fanyi.youdao.com/', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)' } data = { 'i': content, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': '15791434983359', 'sign': '4c3ba7ac1aefe25a7e0f6780c3f08512', 'ts': '1579143498335', 'bv': '120ea3adb00787750fbc44dd1af54b88', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME', } res = requests.post(url, headers=headers, data=data) if res.status_code == 200: result = res.json() if 'translateResult' in result: return result['translateResult'][0][0]['tgt'] else: return result else: return '请求失败' # 界面 class Application: def __init__(self): self.youdao = YouDao() # 创建窗口对象 self.window = Tk() # 窗口对象的标题 self.window.title(u'我的程序') # 设置窗口的大小和位置(宽:310,高:370,坐标:500,300) self.window.geometry("310x370+500+300") self.window.minsize(310,370) self.window.maxsize(310,370) # 创建一个文本框 # self.text1 = Text(self.window, background='azure') self.text1 = Text(self.window, background='#ccc', foreground='black') self.text1.place(x=10, y=5, width=290, height=165) # 设置位置坐标和大小 self.text1.bind('<Key-Return>', self.text1_event) # 绑定键盘回车键事件 # 创建提示标题 self.label1 = Label(self.window, text=u'翻译结果:') self.label1.place(x=10, y=175) # 创建按钮 self.btn1 = Button(self.window, text='翻译', command=self.btn1_event) self.btn1.place(x=220, y=175, width=35, height=25) self.btn2 = Button(self.window, text='清空', command=self.btn2_event) self.btn2.place(x=263, y=175, width=35, height=25) # 创建结果文本框 self.text2 = Text(self.window, background='black', foreground='white') self.text2.place(x=10, y=205, width=290, height=165) # text1 监听回车事件 def text1_event(self, event): # 获取用户输入的值 content = self.text1.get(0.0, END).strip().replace(' ', ' ') print(content) # 进行翻译 result = self.youdao.fanyi(content) # 填写结果到结果输入框 self.text2.delete(0.0, END) self.text2.insert(END, result) # btn1 翻译事件 def btn1_event(self): # 获取用户输入的值 content = self.text1.get(0.0, END).strip().replace(' ', ' ') print(content) # 进行翻译 result = self.youdao.fanyi(content) # 填写结果到结果输入框 self.text2.delete(0.0, END) self.text2.insert(END, result) # btn2 清空事件 def btn2_event(self): # 清空文本框的内容 self.text1.delete(0.0, END) self.text2.delete(0.0, END) def run(self): # 进入循环 self.window.mainloop() if __name__ == '__main__': app = Application() app.run()
运行结果:
遇到的问题:
1、解决有道翻译返回 {'errorCode': 50}的问题:
1)更改请求 url,把translate_o修改成translate
参考:https://blog.csdn.net/qq_36697196/article/details/90696845
2)参考:https://blog.csdn.net/suixinlun/article/details/93976400
2、tkinter的基本操作:
https://www.runoob.com/python/python-gui-tkinter.html
https://www.cnblogs.com/happy-xiaoxiao/p/10494508.html
3.图形界面打包
1)使用pyinstaller来进行打包,工具安装命令:
pip install pyinstaller
2)打包命令:(只需编译入口文件即可,即:pyinstaller 选项 Python 源文件)
pyinstaller -F -w main.py