在Ubuntu上使用PyGObject和Python实现Gtk拼写检查

3
我使用Python和GTK创建了一个小助手应用程序。我以前从未使用过GTK。根据http://www.pygtk.org/上的评论,我使用了PyGObject接口。
现在我想在我的Gtk.TextBuffer中添加拼写检查。
我发现了一个名为GtkSpell的库和一个相关的python-gtkspell包管理器,但是当我尝试导入它时,它会失败并显示“ImportError:cannot import name TextView from gtk”,我认为这意味着它正在使用PyGtk而不是PyGObject。
有没有办法使用PyGObject使其正常工作?或者我可以使用其他预制的GTK拼写检查系统吗?
2个回答

4
昨天我写了一个程序,因为我也遇到了同样的问题,所以它还有点初级,但它可以正常工作。您可以从https://github.com/koehlma/pygtkspellcheck获取源代码。它需要pyenchant,我只在Archlinux上使用Python 3进行了测试。如果有什么问题,请随时在Github上填写错误报告。
您必须使用python3 setup.py install来安装它。它由两个软件包组成,gtkspellcheck用于拼写检查,pylocale提供人类可读的国际化语言代码名称,例如de_DEen_US
由于尚无文档,以下是一个示例:
# -*- coding:utf-8 -*-

import locale

from gtkspellcheck import SpellChecker, languages, language_exists
from gi.repository import Gtk as gtk

for code, name in languages:
    print('code: %5s, language: %s' % (code, name))

window = gtk.Window.new(gtk.WindowType(0))
view = gtk.TextView.new()
if language_exists(locale.getdefaultlocale()[0]):
    spellchecker = SpellChecker(view, locale.getdefaultlocale()[0])
else:
    spellchecker = SpellChecker(view)
window.set_default_size(600, 400)
window.add(view)
window.show_all()
window.connect('delete-event', lambda widget, event: gtk.main_quit)
gtk.main()

太好了。它可以直接在py2.7上运行。我将gtkspellcheck导入和if else语句复制到我的程序中。通过setup.py,我收到一个关于locale.db未找到的错误,但如果我将gtkspellcheck和locale目录复制到我的程序中,一切都很好。此外,当切换记录时,我通过替换gtk.TextBuffer重新加载缓冲文本(不确定为什么要这样做),所以我必须在替换后创建拼写检查器并调用recheck_all。尽管遇到了问题,但从头到尾,包括解决问题,整个集成过程最多只需要10分钟,非常感谢。 - Gordon Wrigley
GtkSpell真的很差,而这个库非常好,所以我将其移植到PyGtk并添加了一些功能:https://github.com/koehlma/pygtkspellcheck/issues/2 - Havok

1

我担心PyGObject接口还很新,所以GtkSpell尚未更新以使用它。据我所知,没有其他预制的GTK拼写检查器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接