在Ubuntu上使用PyGObject进行Python的Gtk拼写检查

3 投票
2 回答
1272 浏览
提问于 2025-04-16 16:17

我用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 个回答

1

我担心PyGObject这个接口比较新,所以GtkSpell还没有更新来使用它。根据我所知道的,似乎没有其他现成的GTK拼写检查工具。

4

我昨天写了一个,因为我也遇到了同样的问题,所以现在这个版本还不太成熟,但运行得很好。你可以从这里获取源代码:https://github.com/koehlma/pygtkspellcheck。它需要用到pyenchant,我只在Archlinux上用Python 3测试过。如果有什么不对的地方,欢迎在Github上提交bug报告。

你需要通过 python3 setup.py install 来安装它。这个项目包含两个部分,gtkspellcheck 是用来检查拼写的,pylocale 则提供了人类可读的国际化语言代码名称,比如 de_DE(德语)或 en_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()

撰写回答