前面我們對圖形界面進行了設(shè)計并通過爬蟲完成了翻譯功能,這一節(jié)我們就把前面的內(nèi)容結(jié)合到一起完成翻譯器的制作。
1. 完整代碼
import wx import urllib.request # 導(dǎo)入模塊 import urllib.parse import json class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "翻譯器", size=(600, 200)) panel = wx.Panel(self)#創(chuàng)建一個畫布,然后創(chuàng)建功能區(qū)并放到畫布上 #創(chuàng)建一個標題,放在panel中 self.title = wx.StaticText(panel,label = '簡單翻譯器') #創(chuàng)建一個靜態(tài)文本,放在panel中 self.translate = wx.StaticText(panel,label = '翻譯內(nèi)容:') #創(chuàng)建一個輸入文本框,放在panel中 self.tran_slate = wx.TextCtrl(panel,style = wx.TE_LEFT) #創(chuàng)建一個翻譯按鈕,放在panel中 self.button_ts = wx.Button(panel,label = '翻譯') #綁定按鈕事件,點擊觸發(fā)翻譯函數(shù) self.button_ts.Bind(wx.EVT_BUTTON, self.OnclickEventname) #創(chuàng)建一個關(guān)閉按鈕,放在panel中 self.button_shutdown = wx.Button(panel, label='關(guān)閉') #綁定按鈕事件,點擊觸發(fā)關(guān)閉函數(shù) self.button_shutdown.Bind(wx.EVT_BUTTON, self.OnclickEvent) container_one = wx.BoxSizer(wx.HORIZONTAL) #把靜態(tài)文本和輸入文本框放在這個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) #再創(chuàng)建一個水平排布的BoxSizer container_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) #創(chuàng)建一個豎直排布的BoxSizer sizers = wx.BoxSizer(wx.VERTICAL) #把上面的內(nèi)容都放到這個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) def OnclickEventname(self,e): global panel urnm = self.tran_slate.GetValue() url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" data = {} data['i'] = urnm data['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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945. 130 Safari/537.36') response = urllib.request.urlopen(r) html = response.read().decode('utf-8') trs = json.loads(html) result = trs['translateResult'][0][0]['tgt'] print("翻譯結(jié)果:",result) wx.MessageBox('翻譯結(jié)果:%s'%result,'翻譯器') def OnclickEvent(self,e): self.Destroy() if __name__ == "__main__": app = wx.App() frame = MyFrame() frame.Show() app.MainLoop()
2. 代碼分析
由于本節(jié)的代碼是源于前兩節(jié),相同的代碼部分我們就不再重復(fù)去分析,我們主要來看一下不同的地方,
#創(chuàng)建一個翻譯按鈕,放在panel中 self.button_ts = wx.Button(panel,label = '翻譯') #綁定按鈕事件,點擊觸發(fā)翻譯函數(shù) self.button_ts.Bind(wx.EVT_BUTTON, self.OnclickEventname) #創(chuàng)建一個關(guān)閉按鈕,放在panel中 self.button_shutdown = wx.Button(panel, label='關(guān)閉') #綁定按鈕事件,點擊觸發(fā)關(guān)閉函數(shù) self.button_shutdown.Bind(wx.EVT_BUTTON, self.OnclickEvent)
我們在翻譯和關(guān)閉按鈕上面分別綁定了事件,在點擊的時候會觸發(fā)相應(yīng)的函數(shù),來分析一下函數(shù),關(guān)閉按鈕的函數(shù)相對比較簡單,即點擊按鈕關(guān)閉窗口。
def OnclickEvent(self,e): self.Destroy()
在我們點擊翻譯按鈕的時候會觸發(fā)翻譯功能,翻譯功能中內(nèi)容大家在上一節(jié)中可以詳細的了解到,這里我們主要進行一個參數(shù)的傳遞。
urnm = self.tran_slate.GetValue()
把GUI界面輸入的信息傳遞到data當中。
data['i'] = urnm
這樣就對應(yīng)了上一節(jié)我們輸入的content內(nèi)容,最后再看這一行代碼
wx.MessageBox('翻譯結(jié)果:%s'%result,'翻譯器')
我們通過一個窗口來返回翻譯結(jié)果,這樣就實現(xiàn)了翻譯功能。
3. 測試
最后我們來測試我們的翻譯器。
4. 總結(jié)
本節(jié)的實戰(zhàn)內(nèi)容較為基礎(chǔ),主要是結(jié)合GUI編程和爬蟲的內(nèi)容,如果感興趣的還可以結(jié)合數(shù)據(jù)庫進行更加完整的實戰(zhàn)內(nèi)容,下一個實戰(zhàn)會結(jié)合數(shù)據(jù)庫來進一步完成實戰(zhàn)內(nèi)容。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程