用python+pygtk+glade3 实现Yahoo翻译桌面版.docx_第1页
用python+pygtk+glade3 实现Yahoo翻译桌面版.docx_第2页
用python+pygtk+glade3 实现Yahoo翻译桌面版.docx_第3页
用python+pygtk+glade3 实现Yahoo翻译桌面版.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用 python+pygtk+glade3 实现Yahoo翻译桌面版2009-03-15 2200#转这个代码,方便学习pygtk,对比了tk和wx,发现还是pygtk好点。#转自index.phpa=post&bid=17每次翻译都去yahoo的网站不是很方便,所以自己写了一个Yahoo翻译桌面版) 整个程序用 python 做为编码语言, pygtk 库实现 gui。为了方便,用glade3画了界面。先来看看最终的程序界面吧:(由于我用不到别的外语,所以功能上只有英汉互译。)首先,在开始编码之前,分析一下yahoo翻译的网页()来确定程序的核心逻辑。Yahoo翻译的网页源码很简单,一目了然,不像google翻译的网页有这么多花哨的ajax,每次翻译都是向translate_txtPOST数据,格式为“ei=UTF-8&fr=&lp=en_zh&trtext=”英译中对应的lp值为en_zh,中译英对应的lp值为zh_en,trtext就是原文的内容。分析好了就可以开始编码了) 贴出程序的完整源码:#!usrbinenv python# - coding utf-8 -#导入库文件import pygtkimport gtkimport gtk.gladeimport urllibimport urllib2import threadingimport reimport sys #翻译功能类,继承于一个线程类。class trans(threading.Thread) #初始化 def _init_(self) threading.Thread._init_(self, name=trans) self.url=translate_txt self.text=None self.trans_in= self.trans_out= self.text_out=None self.text_in=None def getText(self,widget) buf=widget.get_buffer() b,e=buf.get_bounds() return buf.get_text(b,e) def setText(self,widget,text=) buf=widget.get_buffer() buf.set_text(text) widget.set_buffer(buf) def run(self) self.setText(self.text_out,正在翻译) values=eiUTF-8, fr, lp%s_%s %(self.trans_in,self.trans_out), trtext%s %(self.getText(self.text_in).replace(n,rnr),) data=urllib.urlencode(values) request=urllib2.Request(self.url,data) conn=urllib2.urlopen(request) res=conn.read() res=re.findall(div id=pd class=pd (.1,)div,res) res=res0.replace(br,n) res=res.replace(dnt dnt,n) self.setText(self.text_out,res)#主界面类class yahooTrans() def _init_(self) self.ui_file=sys.path0+ui.glade self.widgetTree=gtk.glade.XML(self.ui_file,window1) dic=on_exit_clickedgtk.main_quit, on_window1_destroygtk.main_quit, on_to_zh_clickedself.toZh, on_to_en_clickedself.toZh self.widgetTree.signal_autoconnect(dic) def toZh(self,widget) print widget.get_name() t=trans() t.text_in=self.widgetTree.get_widget(text_in) t.text_out=self.widgetTree.get_widget(text_out) if widget.get_name()=to_zh t.trans_in=en t.trans_out=zh else t.trans_in=zh t.trans_out=en t.setDaemon(True) t.start() def main(self) gtk.main()#入口,gtk主程序循环if _name_=_main_ gtk.gdk.threads_init() app=yahooTrans() app.main()可见,程序中用到了多线程:把翻译过程放在另一个线程中执行。这是因为这个是在线翻译程序,点击翻译按钮后的处理过程(网络通信)相对比较漫长。所以必须使gtk主循环与处理过程(翻译)异步。如果直接把翻译过程放在按钮消息映射函数(def toZh(self,widget))中的话,那么程序在读取网络的时候,整个界面会僵死,直至处理完成。还有,程序界

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论