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