



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年康复护理病例分析题库及答案
- 2025年会计专业考试中级财务管理试题与参考答案
- 2025年嵌入式软件开发试题及答案
- 2025年全国电工技师职业技能考试试题附答案
- 2025年注册会计师考试《会计》合并财务报表高频考点模拟试题含答案
- 2025年《医疗器械经营监督管理办法》培训试题(附答案)
- 物流与供应链管理专业考试题2025年及答案
- 2025宪法知识竞赛考试题及答案
- 2025年护士执业资格考试题库基础护理学操作技能试题解析含答案
- 2025年广东省选调生考试行测真题及参考答案解析
- 各种奶茶配方资料
- 【MOOC】《中国马克思主义与当代》(北京科技大学)中国大学MOOC慕课答案
- 八年级语文下册-专题08-语言表达与运用-(中考真题演练)(原卷版)
- 《围绕用好“两个途径”发挥“三个作用”推进国有经济布局优化和结构调整》课件
- 新能源汽车充电站建设项目 投标方案(技术方案)
- 留置针静脉血栓形成的原因及预防措施
- 隧道工程技术标完成版
- 2024版合伙人退出合伙协议书书
- (高清版)DZT 0301-2017 海洋地质图图例图式及用色标准
- 优化方案数学必修一
- 读书分享会冰心《去国》
评论
0/150
提交评论