evgenyl 13.08.2009 11:40

PythonGoogle переводчик

Захотелось поддержать блог о питоне, накидал простой пример переводчика используя сервис google translate.



Все очень просто, в трее висит иконка, по нажатию на нее появляется окно, пишем в нем текст на английском, enter и в нем же видим перевод на русском языке.



Жмем еще раз по иконке окно исчезает, правая кнопка по иконке выход.



Это всего лиш пример того что можно делать на питоне.



Исходный код



  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/python



import pygtk

pygtk.require("2.0")



import gtk

import gobject

import sys, os, re

import pango

import urllib2

import urllib



user_agent='Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.4) Gecko/2008120916 Gentoo Firefox/3.0.4'



def g_trans(f,t,text):

url = 'http://translate.google.com/translate_a/t?client=t&text;=%s&sl;=%s&tl;=%s' % ( urllib.quote(text),f,t )

req = urllib2.Request(url)

req.add_header('User-Agent',user_agent)

res = urllib2.urlopen(req).read()

try:

res=eval(res)

except:

pass

if isinstance(res,list):

return res<0>+&#39;\n'+'\n'.join( < i for i in res<1><0> if i!='noun'> )

return res



class App:

def __init__(self):

# - UI --------------------

self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)

self.win.resize(400,200)

self.win.move(200,100)

self.win.set_deletable(False)

self.win.set_title(&#39;Google Translate')

self.text_buf = gtk.TextBuffer()

self.text = gtk.TextView(self.text_buf)

self.text.modify_font( pango.FontDescription(&#39;sans normal 12' ) )

self.text.connect(&#39;key_press_event',self.text_key_press)

self.text.set_wrap_mode(gtk.WRAP_WORD)

self.win.add(self.text)

self.win.set_border_width(3)

# - menu ------------------

self.menu = gtk.Menu()

self.menu_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT)

self.menu_quit.connect(&#39;activate', self.quit)

self.menu.append(self.menu_quit)

# - tray ------------------

self.tray = gtk.StatusIcon()

self.tray.set_from_stock(gtk.STOCK_REFRESH)

self.tray.set_tooltip(&#39;Google Translate')

self.tray.connect(&#39;activate',self.show_win)

self.tray.connect(&#39;popup-menu', self.popup, self.menu)

# - init ------------------

self.desktop = gtk.gdk.get_default_root_window()



def popup(self, widget, button, time, data = None):

if button==3 and data:

data.show_all()

data.popup(None, None, None, 3, time)



def quit(self,widget):

gtk.main_quit()



def show_win(self,widget):

if self.win.get_property(&#39;visible'):

self.win.hide()

else:

self.win.show_all()



def text_key_press(self,w,p):

if p.string==&#39;\r':

text=self.text_buf.get_text(self.text_buf.get_start_iter(),self.text_buf.get_end_iter())

self.text_buf.set_text(&#39;')

self.text_buf.set_text(unicode( g_trans(&#39;en','ru',text)))



if __name__ == &#34;__main__":

app = App()

gtk.main()



Тэги: example Google pygtk python translate
+ 22 -
Похожие Поделиться

mistako 13.08.2009 12:41 #
Мужчина, человеческое спасибо тебе!
squ1b3r 13.08.2009 12:44 #
Хы ) вчера сидел и думал, что надо бы что-то такое накидать, а то надоедает каждый раз в браузер залить :) спасибо тебе огромное!
evgenyl 13.08.2009 13:49 #
Всегда пожалуйста!
exelens 13.08.2009 13:53 #
А скомпилить можешь? Чтобы просто тыкать и оно работало?
evgenyl 13.08.2009 13:56 #
поставь pygtk (вероятно уже стоит)
сохрани исходный код в trans.py дай права на запуск и все тыкай :)
exelens 13.08.2009 14:01 #
=))) Прикольная штука! Пасиб
mistako 13.08.2009 15:34 #
Могу ли попросить вас о версии для python 3+
evgenyl 13.08.2009 15:42 #
он же ещё не стабилен ???
какую ошибку выдает когда запускаеш ?
monolith 13.08.2009 16:31 #
Третья ветка давно стабильна:

…Python 2.6 and 3.1 are considered stable production releases…

http://python.org/download/
evgenyl 13.08.2009 16:34 #
да я особо не слежу за ним, у меня в генте ещё не стабильный :)
drujebober 23.08.2009 20:34 #
стабильность тут не причем, pygtk нету еще под 3-й
evgenyl 13.08.2009 14:02 #
Добавил исходник.
predator 13.08.2009 16:27 #
круто, чувак =) большой плюс
Kraplax 14.08.2009 07:35 #
А для тех, кому хочется того же, только для KDE4 - плагин KRunner для перевода в Google translate :D
or10n 14.08.2009 15:00 #
классненько было бы еще обратный перевод, т.е. пишешь слово на русском, и получаешь перевод на английском.
saturn721 14.08.2009 20:05 #
а вы в строке self.text_buf.set_text(unicode( g_trans('en','ru',text))) 'ru' с 'en' местами поменяйте и будет вам счастье.
or10n 16.08.2009 15:28 #
мне хотелось бы что скрипт сам определял что я ввел, и сам выбирал направление перевода.
а то что у меня значек в трее в виде стрелочки, как будет ребута система хочет, это нормально ?
evgenyl 23.08.2009 17:29 #
Простите уезжал, можно дописать, да я первый понравившийся значек из стоков взял.
VGusev2007 15.08.2009 00:29 #
Отлично работает! Главное очень аскетично! Нет ничего лишнего. Буду всегда теперь испольовать.
exelens 24.08.2009 23:00 #
http://habrahabr.ru/blogs/PyGTK/67668/ почти как твоё, да?
evgenyl 27.08.2009 09:34 #
угу :)