我正在尝试让我的pygtk应用程序按照openoffice calc的方式运行,关于小数点。这意味着当收到KP_Decimal键(键盘中的点)时,我希望我的条目显示当前语言环境中的小数点(适当地使用点或逗号)。
我已经搜索了很长一段时间了,但我还是找不到如何做到这一点。我可以捕获Gtk.Entry中的key_press_event,并检查KP_Decimal,我可以得到小数点的当前区域设置;但如果需要,我不知道如何将点转换为逗号。
我希望这个更改对应用程序是全局的,而不是特定于某些条目,所以如果可以通过更通用的东西(如输入方法)来完成它会更好。我也一直在阅读它们,我也找不到按照我想要的方式使用它们的方法。
答案 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
。
希望这有帮助!