如何在pygtk中将一个键转换为另一个键

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

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

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

最佳答案 你可以这样做的一种方法是通过子类化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.

希望这可以帮助!

点赞