Skip to content

Instantly share code, notes, and snippets.

@yurenju
Created January 28, 2011 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yurenju/800218 to your computer and use it in GitHub Desktop.
Save yurenju/800218 to your computer and use it in GitHub Desktop.
gtk-gtr2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygtk
pygtk.require ('2.0')
import gtk
from urllib2 import urlopen
from urllib import urlencode
import urllib2
import urllib
import simplejson
import sys
from threading import Thread
import gobject
def translate(text):
sl="zh-tw"
tl="en"
langpair='%s|%s'%(tl,sl)
base_url='http://ajax.googleapis.com/ajax/services/language/translate?'
data = urllib.urlencode({'v':1.0,'ie': 'UTF8', 'q': text,
'langpair':langpair})
url = base_url+data
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
result = json['responseData']['translatedText']
return result
class TransThread (Thread):
def __init__(self, text, obj):
self.text = text
self.obj = obj
Thread.__init__(self)
def run(self):
try:
self.result = translate(self.text)
except:
self.result = "error"
gtk.gdk.threads_enter()
self.obj.emit("thread-complete")
gtk.gdk.threads_leave()
class Translation (gtk.Object):
def __init__ (self):
self.__gobject_init__()
self.builder = gtk.Builder()
self.builder.add_from_file ("translation.xml")
self.builder.connect_signals(self)
win = self.builder.get_object("window1")
win.show_all()
gobject.signal_new("thread-complete",
Translation,
gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ())
self.connect ("thread-complete", self.thread_complete)
def thread_complete (self, widget):
print "complete"
button = self.builder.get_object ("button_tr")
button.set_label ("翻譯")
button.set_sensitive (True)
buff = self.builder.get_object("textview_result").get_buffer()
buff.delete (buff.get_start_iter(), buff.get_end_iter())
buff.insert (buff.get_start_iter(), self.thread.result)
def on_window_delete_event (self, window, data):
gtk.main_quit()
def on_button_tr_clicked (self, data):
button = self.builder.get_object ("button_tr")
button.set_label ("翻譯中…")
button.set_sensitive (False)
buff = self.builder.get_object("textview_orig").get_buffer()
text = buff.get_text(buff.get_start_iter(), buff.get_end_iter())
self.thread = TransThread (text, self)
self.thread.start ()
if __name__ == "__main__":
gobject.type_register (Translation)
gtk.gdk.threads_init()
t = Translation()
gtk.main()
@zh4n7wm
Copy link

zh4n7wm commented Jan 31, 2011

能提供 translation.xml 吗?

@yurenju
Copy link
Author

yurenju commented Jan 31, 2011

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment