如何更改gtk.spinbutton中的显示

时间:2011-01-28 11:44:44

标签: gtk spinner

我有一个gtk.spinbutton,我想根据语言环境设置数字 格式。 比如说我有一个安装匈牙利语的语言环境,所以我的小数点分隔符是 '。'(点)和千分隔符是','(逗号)例如:我的旋钮值是 1131191所以在用户专注于gtk.spinbutton后我的值应该是 转换为11,311.91。转换是由我做的,但我无法设置 它使用set_text / set_value方法到gtk.spinbutton。

感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:2)

可以通过处理output信号来格式化SpinButton。

locale.setlocale(locale.LC_ALL, '')

def output(spin):
    digits = int(spin.props.digits)
    value = spin.props.value
    text = locale.format('%.*f', (digits, value), True)
    spin.props.text = text
    return True

spin.connect('output', output)

如果您还想让用户以本地化格式输入值(例如,让用户键入" 1,000"而不是" 1000"),请处理input信号。

def input(spin, new_value):
    text = spin.props.text
    try:
        value = locale.atof(text)
    except ValueError:
        return -1
    p = ctypes.c_double.from_address(hash(new_value))
    p.value = value
    return True

spin.connect('input', input)

(这段代码比应该的长,因为PyGTK没有正确地包装输入,因此ctypes破解。它只是解析文本然后将数值赋给指针位置。)

致谢:ctypes hack和数字格式的灵感来自PyGTK邮件列表中的Tim Evans's post