Форматирование 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)
Если вы также хотите, чтобы пользователи могли вводить значения в локализованном формате (например, чтобы пользователь вводил «1000» вместо «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 неправильно переносит input , отсюда и взлом ctypes. Он просто анализирует текст и затем присваивает числовое значение указателю.)
Авторы: взлом ctypes и форматирование цифр основаны на сообщении Тима Эванса в списке рассылки PyGTK.