لقد قمنا سابقًا بتصميم الواجهة الرسومية وأكملنا وظيفة الترجمة من خلال الزاحف، وفي هذا القسم سنقوم بدمج المحتوى السابق لإكمال إنتاج المترجم.
importwximporturllib.request#استيراد الوحدة importurllib.parseimportjsonclassMyFrame(wx.Frame):def__init__(self):wx.Frame.__init__(self,None,-1,translator,size=(600,2) 00))panel=wx.Panel(self)# أنشئ لوحة قماشية، ثم أنشئ شريطًا وضعها على اللوحة القماشية # أنشئ عنوانًا وضعه في اللوحة self.title=wx.StaticText(panel,label='Simple Translator ')#إنشاء نص ثابت ووضعه في اللوحة self.translate=wx.StaticT ext(panel,label='Translation content:')# أنشئ مربع نص إدخال وضعه في اللوحة self.tran_slate=wx.TextCtrl(panel,style=wx.TE_LEFT)# أنشئ زر ترجمة وضعه في لوحة ذاتية .button_ts=wx.Button(panel,label= 'Translation')#حدث زر الربط، انقر لتشغيل وظيفة الترجمة self.button_ts.Bind(wx.EVT_BUTTON,self.OnclickEventname)#إنشاء زر إغلاق ووضعه في اللوحة self.button_shutdown=wx.Button(panel,label= 'إغلاق') زر #ربط المكون، انقر لتشغيل وظيفة الإغلاق self.button_shutdown.Bind(wx.EVT_BUTTON,self.OnclickEvent)container_one=wx.BoxSizer(wx.HORIZONTAL)# ضع النص الثابت ومربع نص الإدخال في حاوية BoxSizer_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 هذه_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 هذه. أضف (self.t) itle,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)سي zers.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.Req uest(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')re sponse=urllib.request.urlopen(r)html=response.read().decode('utf-8')trs=json.loads(html)result=trs['translateResult'][0][0][' tgt']طباعة(نتيجة الترجمة:،النتيجة) wx.MessageBox('نتيجة الترجمة: %s'%result,'Translator') defOnclickEvent(self,e):self.Destroy()if__name__==__main__:app=wx.App()frame=MyFrame()frame ()app.MainLoop()
نظرًا لأن الكود الموجود في هذا القسم مشتق من القسمين السابقين، فلن نكرر تحليل نفس أجزاء الكود، فلننظر بشكل أساسي إلى الاختلافات.
# أنشئ زر ترجمة وضعه في اللوحة self.button_ts=wx.Button(panel,label='Translation')#ربط حدث الزر، انقر لتشغيل وظيفة الترجمة self.button_ts.Bind(wx.EVT_BUTTON,self .OnclickEventname) #إنشاء واحد زر إغلاق، يتم وضعه في اللوحة self.button_shutdown=wx.Button(panel,label=' Close')# حدث زر Bind، انقر لتشغيل وظيفة الإغلاق self.button_shutdown.Bind(wx.EVT_BUTTON,self.OnclickEvent)
لقد قمنا بربط الأحداث بأزرار الترجمة والإغلاق على التوالي، عند النقر عليها، سيتم تشغيل الوظائف المقابلة. دعونا نحلل الوظائف. وظيفة زر الإغلاق بسيطة نسبيًا، أي انقر فوق الزر لإغلاق النافذة.
defOnclickEvent(self,e):self.Destroy()
عندما ننقر على زر الترجمة، سيتم تشغيل وظيفة الترجمة، ويمكن التعرف على محتوى وظيفة الترجمة بالتفصيل في القسم السابق، حيث نقوم هنا بتمرير المعلمة بشكل أساسي.
urnm=self.tran_slate.GetValue()
تمرير المعلومات المدخلة على واجهة المستخدم الرسومية إلى البيانات.
data['i']=urnm
وهذا يتوافق مع المحتوى الذي أدخلناه في القسم السابق، وأخيرًا، انظر إلى هذا السطر من التعليمات البرمجية.
wx.MessageBox('نتيجة الترجمة: %s'%result,'مترجم')
نقوم بإرجاع نتائج الترجمة من خلال نافذة، وبالتالي تحقيق وظيفة الترجمة.
وأخيرا نأتي لاختبار مترجمنا.
يعد المحتوى القتالي الفعلي في هذا القسم أساسيًا نسبيًا، ويجمع بشكل أساسي بين برمجة واجهة المستخدم الرسومية ومحتوى الزاحف. إذا كنت مهتمًا، فيمكنك أيضًا دمج قاعدة البيانات لإكمال المحتوى القتالي الفعلي، حيث ستدمج المعركة الفعلية التالية قاعدة البيانات لإكمال المحتوى الفعلي المحتوى القتالي.