前面我们对图形界面进行了设计并通过爬虫完成了翻译功能,这一节我们就把前面的内容结合到一起完成翻译器的制作。
importwximporturllib.request#导入模块importurllib.parseimportjsonclassMyFrame(wx.Frame):def__init__(self):wx.Frame.__init__(self,None,-1,翻译器,size=(600,200))panel=wx.Panel(self)#创建一个画布,然后创建功能区并放到画布上#创建一个标题,放在panel中self.title=wx.StaticText(panel,label='简单翻译器')#创建一个静态文本,放在panel中self.translate=wx.StaticText(panel,label='翻译内容:')#创建一个输入文本框,放在panel中self.tran_slate=wx.TextCtrl(panel,style=wx.TE_LEFT)#创建一个翻译按钮,放在panel中self.button_ts=wx.Button(panel,label='翻译')#绑定按钮事件,点击触发翻译函数self.button_ts.Bind(wx.EVT_BUTTON,self.OnclickEventname)#创建一个关闭按钮,放在panel中self.button_shutdown=wx.Button(panel,label='关闭')#绑定按钮事件,点击触发关闭函数self.button_shutdown.Bind(wx.EVT_BUTTON,self.OnclickEvent)container_one=wx.BoxSizer(wx.HORIZONTAL)#把静态文本和输入文本框放在这个BoxSizer当中container_one.Add(self.translate,proportion=0,flag=wx.ALL,border=7)container_one.Add(self.tran_slate,proportion=1,flag=wx.ALL,border=7)#再创建一个水平排布的BoxSizercontainer_two=wx.BoxSizer(wx.HORIZONTAL)#把两个按钮放到这个BoxSizer中container_two.Add(self.button_ts,proportion=0,flag=wx.ALIGN_CENTER,border=4)container_two.Add(self.button_shutdown,proportion=0,flag=wx.ALIGN_CENTER,border=4)#创建一个竖直排布的BoxSizersizers=wx.BoxSizer(wx.VERTICAL)#把上面的内容都放到这个BoxSizer当中即可sizers.Add(self.title,proportion=0,flag=wx.BOTTOM|wx.TOP|wx.ALIGN_CENTER,border=10)sizers.Add(container_one,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=40)sizers.Add(container_two,proportion=0,flag=wx.ALIGN_CENTER|wx.TOP,border=10)panel.SetSizer(sizers)defOnclickEventname(self,e):globalpanelurnm=self.tran_slate.GetValue()url=http://fanyi.youdao.com/translate?smartresult=dict&smartresult=ruledata={}data['i']=urnmdata['from']='AUTO'data['to']='AUTO'data['smartresult']='dict'data['client']='fanyideskweb'data['salt']='15823411455528'data['sign']='d03024a90896a5eb31a74a9344657b0e'data['doctype']='json'data['version']='2.1'data['keyfrom']='fanyi.web'data['action']='FY_BY_REALTlME'data=urllib.parse.urlencode(data).encode('utf-8')r=urllib.request.Request(url,data)r.add_header('User-Agent','Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/79.0.3945.130Safari/537.36')response=urllib.request.urlopen(r)html=response.read().decode('utf-8')trs=json.loads(html)result=trs['translateResult'][0][0]['tgt']print(翻译结果:,result)wx.MessageBox('翻译结果:%s'%result,'翻译器')defOnclickEvent(self,e):self.Destroy()if__name__==__main__:app=wx.App()frame=MyFrame()frame.Show()app.MainLoop()
由于本节的代码是源于前两节,相同的代码部分我们就不再重复去分析,我们主要来看一下不同的地方,
#创建一个翻译按钮,放在panel中self.button_ts=wx.Button(panel,label='翻译')#绑定按钮事件,点击触发翻译函数self.button_ts.Bind(wx.EVT_BUTTON,self.OnclickEventname)#创建一个关闭按钮,放在panel中self.button_shutdown=wx.Button(panel,label='关闭')#绑定按钮事件,点击触发关闭函数self.button_shutdown.Bind(wx.EVT_BUTTON,self.OnclickEvent)
我们在翻译和关闭按钮上面分别绑定了事件,在点击的时候会触发相应的函数,来分析一下函数,关闭按钮的函数相对比较简单,即点击按钮关闭窗口。
defOnclickEvent(self,e):self.Destroy()
在我们点击翻译按钮的时候会触发翻译功能,翻译功能中内容大家在上一节中可以详细的了解到,这里我们主要进行一个参数的传递。
urnm=self.tran_slate.GetValue()
把GUI界面输入的信息传递到data当中。
data['i']=urnm
这样就对应了上一节我们输入的content内容,最后再看这一行代码
wx.MessageBox('翻译结果:%s'%result,'翻译器')
我们通过一个窗口来返回翻译结果,这样就实现了翻译功能。
最后我们来测试我们的翻译器。
本节的实战内容较为基础,主要是结合GUI编程和爬虫的内容,如果感兴趣的还可以结合数据库进行更加完整的实战内容,下一个实战会结合数据库来进一步完成实战内容。