摘要
本项目是用python做的在线中英翻译器。首先用Python Gui编程做出应用程序的窗口以及控件、标签和按钮等工具。然后设置应用程序窗口和各个工具的尺寸大小以及对不同的按钮设置相应的功能函数。然后调用有道词典的在线翻译api,将我们要翻译的数据传递过去进行处理,之后翻译结果传递过来,最后显示在我们的界面上。
1.引言
随着中美文化交流频繁和美国影视作品在中国的受众程度提高,翻译对我们生活的影响力日益凸现出来。文化差异的存在导致人们对于同一事物或概念产生不同的理解和解释。因此对于翻译活动的影响不可小视。在此背景下,我用python编程语言写了一个在线中英翻译软件,方便我们在平时生活遇到不理解的英文单词和句子,都可以通过这个翻译软件翻译你想要理解的英文资料。而且该软件比较简洁,占用内存比较小,运行速度比较快,很适合经常需要翻译的学者。
2.系统结构
在线中英翻译器分为五个模块。创建窗口模块,输入内容模块,翻译结果模块,翻译按钮模块以及退出窗口模块。创建窗口模块,用tkinter创建界面窗口,并设置窗口的大小以及窗口的名字。并且通过获得屏幕宽高度,然后进行数据处理,把窗口定位在屏幕的正中央。输入内容模块,在创建窗口的基础下创建一个文本标签并且设置标签内容,之后创建一个输入控件并且设置该控件的文字字体样式和大小。翻译结果模块,也是在创建窗口的基础下创建一个文本标签并且设置标签内容,之后创建一个输入控件并且设置该控件的文字字体样式和大小。翻译按钮模块也是该项目最重要的模块,在创建窗口的基础下创建一个按钮,设置好按钮的名字,宽度以及在界面上的位置和按下按钮会触发自定义的translate函数,该函数会先从输入内容框获取输入的内容,将内容post到有道词典的api,之后api会返回翻译的结果,并把结果传给翻译结果输入框,最终将翻译结果显示在界面上。退出窗口模块,在创建窗口的基础下创建一个按钮,设置好按钮的名字,宽度以及在界面上的位置并且触发quit关闭窗口函数。
图1 翻译器流程图
3.实现代码
以下是创建窗口模块的代码
# 创建窗口
root = Tk()
#
标题
root.title('
中英互译')
#
窗口大小
root.geometry('370x100')
#
窗口位置
# root.geometry('+600+450')
s_with = root.winfo_screenwidth() #
获取屏幕宽
s_height = root.winfo_screenheight() #
获取屏幕高度
#
计算页面打开在屏幕中央的位置
l_x = str(round((s_with - 370) / 2))
l_y = str(round((s_height - 100) / 2))
root.geometry('+' + l_x + '+' + l_y)
以下是输入内容模块的代码
#
第一列标签
lable = Label(root, text='
请输入内容:')
#
定位布局 grid网格式布局 pack包 place位置
lable.grid()
#
输入控件
extry = Entry(root, font=('
微软雅黑', 15))
extry.grid(row=0, column=1,ipadx=18)
res = StringVar()
以下是翻译结果模块的代码
#
翻译结果标签
lable1 = Label(root, text='
翻译结果:')
lable1.grid(row=1, column=0)
#
翻译结果输入框
extry1 = Entry(root, font=('
微软雅黑', 15),textvariable=res)
extry1.grid(row=1, column=1,ipadx=18)
以下是翻译按钮模块的代码
# 翻译方法
def translate():
content = extry.get()
content = content.strip()
if content == '':
messagebox.showinfo('
提示', '请输入翻译内容')
else:
url =http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
//有道词典的api
data = {}
data['i'] = content
data['from'] = 'auto'
//设置当前的语言,auto表示自动识别
data['to'] = 'auto'
//设置要翻译的语言,auto默认英语
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1538295833420'
data['sign'] = '07'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_REALTIME'
data['typoResult'] = 'false'
headers = {
'User-Agent': 'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/67.0.3396.99 Safari/537.36'
}
// 设置headers是为了给翻译器设置浏览器内核,模仿浏览器行为
result = requests.post(url, data,headers=headers)
//将从输入内容框获取的内容上传到有道api,并且返回翻译结果 trans = result.json()
//将翻译的结果变成对象
tran =trans['translateResult'][0][0]['tgt']
res.set(tran)
//
将翻译的结果传给翻译结果输入框
#
按钮
button = Button(root, text='
翻译', width='10',command=translate)
//给按钮设置触发函数translate
# sticky
对齐方式 N S W E 上下左右
button.grid(row=2, column=0, sticky=W)
以下是退出窗口模块的代码
# 退出按钮 command是点击事件的方法
exit_button = Button(root, text='
退出', width='10',command=root.quit)
//command表示按下按钮触发的函数
exit_button.grid(row=2, column=1, sticky=E)
4.实验
图2 界面初始化
图3 界面翻译结果
5.总结和展望
因为是初学Python,所以对于很多知识都是空白的,很多东西都是新尝试,在调用有道词典api时,总是获取不到数据,最后在网上寻找很多资料才发现是在设置参数的时候设置少了,所以api数据获取不到。因为是初学,所以这次的项目比较粗糙,功能也比较简单。等后面继续学习相关的知识,再做一些设计比较精美的,功能比较完善的项目。
参考文献
[1]《Head-First Python (2nd edition)》
[2]《Python机器学习基础教程》
[3]《Programming Python》