2010-07-01 71 views
4

我想让我的pygtk应用程序按照openoffice calc关于小数点的方式工作。这意味着当接收到KP_Decimal键(键盘上的点)时,我希望我的条目显示当前语言环境中的小数点(适当的点或逗号)。如何将按下的按键转换为不同的按键pygtk

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

我希望此更改对应用程序是全局的,而不是特定于某些条目的,所以如果可以通过更一般的东西来完成,比如输入方法,它会更好。我也一直在阅读他们,我也找不到如何使用它们的方式。你可以这样做

回答

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,只要需要此行为的文本输入即可。

希望这会有所帮助!

+0

非常感谢您的回答!这不完全是我想要的,因为它意味着替换每个文本条目,但它比没有它更好。 – 2010-11-23 18:26:06

相关问题