美文网首页我的Python自学之路python自学
用PyGTK3+ 写一个谷歌翻译器

用PyGTK3+ 写一个谷歌翻译器

作者: 霡霂976447044 | 来源:发表于2019-02-24 21:12 被阅读12次
效果展示

开始

一直在Linux下,遇到网页上的不会的英语单词都是直接使用Chrome的插件解决,但是本地却要打开谷歌翻译,于是想自己写个翻译的软件。代码也就几百行,使用的是py-googletrans 这个包。我觉得在Linux桌面环境下,不管用QT, Gtk+还是Electron等等,先共同创造更多实用的软件,而不是讨论太多技术之间的优差。

使用googletrans

from googletrans import Translator
translator = Translator(service_urls=['translate.google.cn'])
p = translator.translate('只是', dest='en')
print(p)

相信上面的代码直接可以看懂。

使用PyGTK 3 +

code

import gi
import functools
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from googletrans import Translator


translator = Translator(service_urls=['translate.google.cn'])

cn_translate = functools.partial(translator.translate, dest='zh-cn')
en_translate = functools.partial(translator.translate, dest='en')


class MainWindow(Gtk.Window):
    def __init__(self):
        super(MainWindow, self).__init__(Gtk.WindowType.TOPLEVEL)
        self.set_default_size(360, 300)
        self._init_view()
        self.set_border_width(10)
        self.header_bar = self._create_header_bar()
        self.set_titlebar(self.header_bar)

    def _create_header_bar(self):
        hb = Gtk.HeaderBar()
        hb.set_decoration_layout("menu:close")
        hb.set_show_close_button(True)
        hb.props.title = "Translate"
        # refresh button
        refresh_btn = Gtk.Button.new_from_icon_name("view-refresh-symbolic", Gtk.IconSize.BUTTON)
        # refresh_btn.connect("clicked", lambda _: app_state.async_update(self))
        hb.pack_start(refresh_btn)
        # settings button
        settings_btn = Gtk.Button.new_from_icon_name("emblem-system-symbolic", Gtk.IconSize.BUTTON)
        # settings_btn.connect('clicked', self.settings_btn_clicked)
        hb.pack_start(settings_btn)
        return hb

    def _init_view(self):
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)

        scrolledwindow1 = Gtk.ScrolledWindow()
        scrolledwindow1.set_hexpand(True)
        scrolledwindow1.set_vexpand(True)
        text_view1 = Gtk.TextView()

        self.textbuffer1 = text_view1.get_buffer()

        text_view1.set_left_margin(10)
        text_view1.set_top_margin(10)
        text_view1.set_wrap_mode(Gtk.WrapMode.WORD)
        scrolledwindow1.add(text_view1)

        vbox.pack_start(scrolledwindow1, True, True, 0)

        hbox = Gtk.Box(spacing=5)
        self.combo = Gtk.ComboBoxText()
        self.combo.insert(0, "0", "中文")
        self.combo.insert(1, "1", "English")
        self.combo.set_active_id('0')

        hbox.pack_start(self.combo, False, False, 0)

        bt_translate = Gtk.Button(label='translate')
        bt_translate.connect('clicked', self.translate)

        hbox.pack_end(bt_translate, False, False, 0)

        vbox.pack_start(hbox, False, False, 0)

        scrolledwindow2 = Gtk.ScrolledWindow()
        scrolledwindow2.set_hexpand(True)
        scrolledwindow2.set_vexpand(True)
        text_view2 = Gtk.TextView()
        self.textbuffer2 = text_view2.get_buffer()

        text_view2.set_left_margin(10)
        text_view2.set_top_margin(10)
        scrolledwindow2.add(text_view2)
        text_view2.set_wrap_mode(Gtk.WrapMode.WORD)

        vbox.pack_start(scrolledwindow2, True, True, 0)

        self.add(vbox)

    def translate(self, widget):
        start = self.textbuffer1.get_start_iter()
        end = self.textbuffer1.get_end_iter()
        text = self.textbuffer1.get_text(start, end, False)
        if self.combo.get_active_id() == '0':
            print('===0')
        else:
            print('==', self.combo.get_active_id())
        _translate = cn_translate if self.combo.get_active_id() == '0' else en_translate
        trans = _translate(text)
        self.textbuffer2.set_text('')
        # str_buf = """<span size="x-large">{}\n{}</span>""".format(trans.text, trans.extra_data['all-translations'])
        str_buf = """<span size="x-large">{}\n\n</span>""".format(trans.text)

        self.textbuffer2.insert_markup(self.textbuffer2.get_end_iter(), str_buf, -1)

        try:
            str_buf = """<span size="small">{}\n{}</span>""".format(trans.extra_data['all-translations'][0][0], str(trans.extra_data['all-translations'][0][1]))
            self.textbuffer2.insert_markup(self.textbuffer2.get_end_iter(), str_buf, -1)
        except Exception as e:
            pass

        print(trans)
        print(trans.extra_data['all-translations'])


if __name__ == '__main__':
    win = MainWindow()
    win.connect('destroy', Gtk.main_quit)
    win.show_all()
    Gtk.main()

现在只实现了中文和英文的翻译,发音这方面还有问题等等。
有时间的话会继续完善, 欢迎指出问题,或者好的建议
github: https://github.com/Baloneo/py-gtk-translate

相关文章

  • 用PyGTK3+ 写一个谷歌翻译器

    开始 一直在Linux下,遇到网页上的不会的英语单词都是直接使用Chrome的插件解决,但是本地却要打开谷歌翻译,...

  • 《空想神话[未来日记片头曲]》有感

    【注:日语是复制的原歌曲歌词,翻译来自谷歌翻译器】 ConsentesDei Juno Juppiter Mine...

  • 美国之旅第二天

    清晨即将到来,机场觅食遇上一个黑人小姐姐,问路上因为一个单词发音双方纠结到翻谷歌翻译器,旁边的黑人哥哥也...

  • 2021-11-03

    马斯克发了一首古诗,全世界能看懂的不超过20%,所以最大受益者是谷歌翻译,不过谷歌翻译器弄出来的,还是不是那个调,...

  • 用40行python代码写一个桌面翻译器

    这是我做出来的粗略版本,后面的UI设计就看大家的艺术细胞了 软件成果视图 学习Python中有不明白推荐加入交流群...

  • 用40行python代码写一个桌面翻译器!

    这是我做出来的粗略版本,后面的UI设计就看大家的艺术细胞了 image 软件成果视图 学习Python中有不明白推...

  • 如何预防和逆转抑郁症?

    本文来源于Teetee推荐的外文网站,我觉得非常有价值,借助谷歌的翻译器翻译后稍作整理分享。希望可以帮到抑郁症患者...

  • Go:如何翻译文本

    你有没有想过如何开发自己的翻译器?或者你是否遇到过需要开发文本翻译功能的需求?那么本文关于Golang如何使用谷歌...

  • 分享5个宝藏小网站,工作学习都能用到!

    PS:更多工具软件获取请到公众号:悦美兮 今天给大家推荐的是: 比谷歌更胜一筹的翻译器; 把电脑屏保瞬间变有趣; ...

  • 学习人工智能前必然会先了解的python知识

    我们都知道网上的翻译器,像百度翻译,谷歌翻译,搜狗翻译,有道等等,他们是怎么做到的呢?能快速的将自己想翻译的其他语...

网友评论

    本文标题:用PyGTK3+ 写一个谷歌翻译器

    本文链接:https://www.haomeiwen.com/subject/cxabyqtx.html