как изменить отображение в gtk.spinbutton

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

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

Спасибо


person Naresh    schedule 28.01.2011    source источник


Ответы (1)


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

person Johannes Sasongko    schedule 29.01.2011