как изменить отображение в gtk.spinbutton - PullRequest
2 голосов
/ 28 января 2011

У меня есть gtk.spinbutton, и я хочу установить цифры в соответствии с локалью формат. как, скажем, у меня есть установленный язык венгерский, так что мой десятичный разделитель '.' (точка) и разделитель тысяч - это ',' (запятая), например: значение моей кнопки вращения 1131191, поэтому после того, как пользователь сфокусировался на gtk.spinbutton, мое значение должно конвертировать в 11 311,91. преобразование сделано мной, но я не могу установить это gtk.spinbutton либо используя метод set_text / set_value.

Любая помощь приветствуется!

Спасибо

1 Ответ

2 голосов
/ 29 января 2011

Форматирование 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.

...