如何在pygtk中将一个键压缩成另一个键

时间:2010-07-01 20:12:02

标签: python localization gtk pygtk

我正在尝试让我的pygtk应用程序按照openoffice calc的方式运行,关于小数点。这意味着当收到KP_Decimal键(键盘中的点)时,我希望我的条目显示当前语言环境中的小数点(适当地使用点或逗号)。

我已经搜索了很长一段时间了,但我还是找不到如何做到这一点。我可以捕获Gtk.Entry中的key_press_event,并检查KP_Decimal,我可以得到小数点的当前区域设置;但如果需要,我不知道如何将点转换为逗号。

我希望这个更改对应用程序是全局的,而不是特定于某些条目,所以如果可以通过更通用的东西(如输入方法)来完成它会更好。我也一直在阅读它们,我也找不到按照我想要的方式使用它们的方法。

1 个答案:

答案 0 :(得分:2)

你可以做到这一点的一种方法是通过子类化gtk.Entry,如下所示:

import gtk
import locale

class NumericEntry(gtk.Entry):
    __gsignals__ = {
        'key_press_event': 'override'
    }
    def do_key_press_event(self, event):
        if event.keyval == gtk.gdk.keyval_from_name('KP_Decimal'):
            event.keyval = int(gtk.gdk.unicode_to_keyval(ord(locale.localeconv()['decimal_point'])))
        gtk.Entry.do_key_press_event(self, event)

我还没有对此进行全面测试,因此可能会有一两个边缘情况,但它似乎对我来说很好。

使用子类的好处是可以轻松替换现有的小部件 - 只要您需要具有此行为的文本条目时,只需使用NumericEntry而不是gtk.Entry

希望这有帮助!