lures上午是在上德语!下午在3点开始无聊,就利用刚学的tkinter知识自己做了一款在线翻译的软件!
说干就干,花了接近2小时,终于完成了,熟练的在cmd窗口使用pyinstaller进行封装,于是第一版在线翻译软件制作完成!
正好今天没啥话题可写,那朕就写写这个吧!
先来看一下软件运行的情况:
开发环境

lures使用的开发环境是:
Pycharm2019
Python3.7.0
环境的安装,可以在lures的微信公众后台【软件目录】【windows软件】进行查看,寻找你想要安装的软件版本!
安装后,你需要干的事情是:
①pip升级:
python -m pip install --upgrade pip
②pip换成国内镜像:
https://blog.csdn.net/sinat_21591675/article/details/82770360
③pycharm【设置】里面设置Python编译环境
操作方法和下面的类似!
https://blog.csdn.net/observador/article/details/84146985
④【cmd】或者是pycharm的Terminal终端输入:
pip install pyinstallerpip install requests
Ok!如果你按照lures的操作完成了以上环境的配置!
那么,lures就开始开车了……
tkinter图形化界面

tkinter是Python中最为简单的一种GUI图形化界面,在Python中一共是13个这样的GUI库,其中包括pyQt、wxpython……
下面,我们就来完成第一部分的内容——完成界面设计!
from tkinter import *window = Tk()# 窗口的大小,前两个参数是:宽、高,后面的参数是坐标window.geometry('335x100+800+400')# 禁止窗口的拉伸window.resizable(0, 0)# 窗口的标题window.title("中英互译器")# 控件label = Label(window, text="请输入要翻译的文字:", font=("仿宋", 12))# 位置,网格式的布局label.grid(row=0, column=0, sticky='e')# 输入框entry = Entry(window, font=("仿宋", 12))# row和column的作用:该表label控件的位置entry.grid(row=0, column=1)label1 = Label(window, text="翻译之后得到的文字:", font=("仿宋", 12))# sticky是实现对齐方式的label1.grid(row=1, column=0, sticky='e')entry1 = Entry(window, font=("仿宋", 12))entry1.grid(row=1, column=1)# 空出一行,使布局漂亮些label2 = Label(window, text="")label2.grid(row=2, column=0)# 按钮# command = translation完成事件的绑定button = Button(window, text="翻译", width="10")button.grid(row=3, column=0, sticky='w')# command = window.quit是用来退出界面的!button1 = Button(window, text="退出", width="10", command=window.quit)button1.grid(row=3, column=1, sticky='e')# 显示窗口(消息循环)window.mainloop()
其中,lures注释的很详细!
这边布局的方式,tkinter有3种:pack、grid和place
其中呢,常见的是pack和grid!
代码写成那样,运行的框架就是跟我们最终见到的是一样:
但是呢?俺们点击是莫得效果滴!
因为除了最后的【退出】按钮,俺们绑定了command = window.quit外,翻译按钮并没有加入事件的绑定!
所以,下面涉及到我们最关键的:爬虫
有道翻译的爬取

不知道小伙伴们用的常见的翻译软件是哪些?
lures自己呢?习惯是有道翻译、Google翻译、百度翻译
所以这次数据的爬取就用有道翻译来了!
Of course,也可以换成百度翻译和Google翻译!
import requestsdef translation(content): # 去除多余的空格,用于判断用户手输入了信息! con = content.strip() if con != '': url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' headers = { 'Cookie': 'OUTFOX_SEARCH_USER_ID=1972418272@10.108.160.105; JSESSIONID=aaaXYvTD-n_jObqhJjGex; OUTFOX_SEARCH_USER_ID_NCOO=846912277.6744791; ___rl__test__cookies=1585383917099', 'Host': 'fanyi.youdao.com', 'Origin': 'http://fanyi.youdao.com', 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } data = { 'i': con, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } response = requests.post(url=url,headers=headers,data=data) response.encoding = response.apparent_encoding res = response.json()['translateResult'][0][0]['tgt'] print(res)if __name__ == "__main__": content = input("请输入翻译内容:") translation(content)
这样呢,用户输入想要翻译的内容,就可以实现翻译成对应的文字了(中文和英文)。
但是要注意一点问题:
①有道翻译的网址原本不是代码中所展现的,但是这个是有道最原始的url,现在的url估计是担心别人爬的多,所以就加了一些不必要的参数!
②参数都是时间戳的形式,所以需要js解密!这太难了!所以就取巧用了这个原始的url!
下面我们就将这个函数绑定到另一个按钮【翻译】上!
完整代码!

from tkinter import *from tkinter import messageboximport requests"""搭建界面"""def translation(): """完成翻译的功能""" """ 1、获取用户的输入 2、通过爬取【百度翻译、谷歌翻译或者有道翻译】翻译结果 3、根据获取的结果,显示到窗口上 """ # 获取用户输入的结果 content = entry.get() # 去除多余的空格,用于判断用户手输入了信息! con = content.strip() if con == "": messagebox.showinfo('提示', '请输入要翻译的内容!') else: url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' headers = { 'Cookie': 'OUTFOX_SEARCH_USER_ID=1972418272@10.108.160.105; JSESSIONID=aaaXYvTD-n_jObqhJjGex; OUTFOX_SEARCH_USER_ID_NCOO=846912277.6744791; ___rl__test__cookies=1585383917099', 'Host': 'fanyi.youdao.com', 'Origin': 'http://fanyi.youdao.com', 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } """ 注意:url网址本来是"http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" 但是在data中存在的几个参数涉及到js解密,时间戳的问题 所以这里一个取巧的方式就是把网址中的_o去掉(虽然不知道原因) """ data = { 'i': con, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } response = requests.post(url=url,headers=headers,data=data) response.encoding = response.apparent_encoding res = response.json()['translateResult'][0][0]['tgt'] # 将结果显示到窗口上 result.set(res) return res# 创建窗口window = Tk()# 窗口的大小,前两个参数是:宽、高,后面的参数是坐标window.geometry('335x100+800+400')# 禁止窗口的拉伸window.resizable(0, 0)# 窗口的标题window.title("中英互译器")# 控件label = Label(window, text="请输入要翻译的文字:", font=("仿宋", 12))# 位置,网格式的布局label.grid(row=0, column=0, sticky='e')# 输入框entry = Entry(window, font=("仿宋", 12))# row和column的作用:该表label控件的位置entry.grid(row=0, column=1)label1 = Label(window, text="翻译之后得到的文字:", font=("仿宋", 12))# sticky是实现对齐方式的label1.grid(row=1, column=0, sticky='e')# 随时变化的量result = StringVar()entry1 = Entry(window, font=("仿宋", 12),textvariable=result)entry1.grid(row=1, column=1)# 空出一行,使布局漂亮些label2 = Label(window, text="")label2.grid(row=2, column=0)# 按钮# command = translation完成事件的绑定button = Button(window, text="翻译", width="10", command=translation)button.grid(row=3, column=0, sticky='w')# command = window.quit是用来退出界面的!button1 = Button(window, text="退出", width="10", command=window.quit)button1.grid(row=3, column=1, sticky='e')# 显示窗口(消息循环)window.mainloop()
注意的是:
①因为翻译是:实时变化的,所以我们需要设置一个随时变化的量:result = StringVar()
②在后面的文本框内:得到爬取后的翻译结果!
entry1 = Entry(window, font=("仿宋", 12),textvariable=result)
result.set(res) return res
封装软件!

打开【cmd】窗口,切换到我们的代码目录!
大家可以下载自己想要的logo图标作为软件的logo!
这里我就下载了Google翻译的logo!
我们就可以在【cmd】中输入下面的命令:
pyinstaller -F -w -i"logo.ico" demo.py
可以查看命令的执行结果:
我们可以看到已经封装完成!其中软件就在【dist】目录下!
将这个剪切到上一级目录中!其余的可以删掉了!
这样,软件就可以直接使用啦~~
小结

lures无聊时做出来的事!代码不精之处勿怪!
软件及代码只供学习交流和娱乐!拒绝商用!!!
觉得有帮助的朋友们别忘了打卡~~~
