前面我們對圖形介面進行了設計並透過爬蟲完成了翻譯功能,這一節我們就把前面的內容結合到一起完成翻譯器的製作。
importwximporturllib.request#導入模組importurllib.parseimportjsonclassMyFrame(wx.Frame):def__init__(self):wx.Frame.__init__(self,None,-1,翻譯器,size=(600,200))))panel=wx. #建立一個畫布,然後建立功能區並放到畫布上#建立一個標題,放在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(wxBoxSizer(wxBox .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']=urdatares ['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']='2.1'data['keyfrom']='fanyi.web'data['action']='FY_BYBY_ALTl. '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-8f-8 =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程式設計和爬蟲的內容,如果有興趣的還可以結合資料庫進行更完整的實戰內容,下一個實戰會結合資料庫來進一步完成實戰內容。