Изменить шрифт / выравнивание / цвет GtkScale

Есть ли простой способ изменить шрифт, выравнивание и цвет текста значения в виджете GtkScale? Например, я хочу иметь красное и жирное число вместо стандартного черного.


person Genesis Rock    schedule 31.03.2013    source источник


Ответы (1)


В идеале вы должны установить эти свойства в теме. Но если вам нужно, чтобы ваше приложение переопределило тему, вы можете вызвать gtk_widget_modify_font, чтобы сделать текст полужирным, и gtk_widget_modify_fg, чтобы сделать его красным. Использование PyGTK для демонстрации:

import gtk, pango

w = gtk.HScale()

# bold: get existing widget's font description and set weight to bold
fdesc = w.get_pango_context().get_font_description()
fdesc.set_weight(pango.WEIGHT_BOLD)
w.modify_font(fdesc)

# red
w.modify_fg(gtk.STATE_NORMAL, gtk.gdk.Color('red'))

# show it
win = gtk.Window()
win.add(w)
win.show_all()
gtk.main()

... приводит к:

скриншот

person user4815162342    schedule 31.03.2013
comment
Это отлично работает, но когда я устанавливаю value_pos на GTK_POS_RIGHT, у меня появляется некрасивый интервал справа, потому что GTK выделяет (иногда неиспользуемое) пространство для высоких значений. Итак, я хочу установить выравнивание текста значения. Есть ли способ сделать это? - person Genesis Rock; 31.03.2013
comment
@GenesisRock Я не понимаю, что вы имеете в виду; когда я устанавливаю интервал в моем примере с помощью w.set_value_pos(gtk.POS_RIGHT), я не вижу уродливого интервала или не могу его распознать. Вы пробовали изменить свойство value-spacing виджета? - person user4815162342; 31.03.2013
comment
Нет, я не это имел в виду. Но на самом деле это довольно просто: GTK выделяет достаточно места для метки значения, чтобы отобразить весь диапазон. Но когда диапазон очень велик, выделенное пространство также очень велико, и возникает огромный пробел. Следующее изображение должно объяснить это (диапазон от 0 до 1 000 000):! Экран. Но в моем приложении это выглядит очень некрасиво, поэтому я хочу выровнять метку по правому краю. Это должно быть похоже на SLIDER-SPACE-LABEL вместо SLIDER-LABEL-SPACE. - person Genesis Rock; 01.04.2013
comment
@GenesisRock Там gtk_scale_get_layout(), но я не могу добиться видимого результата, изменяя возвращаемый объект. На вашем месте я бы позвонил gtk_scale_set_draw_value(False) и сам распечатал бы значение. Это даст вам полный контроль над выравниванием и всем остальным. - person user4815162342; 01.04.2013
comment
Ага, я тоже подустал layout.stuff себе, и он не особо работает. Поэтому я думаю, что лучше всего будет отображать значение вручную. - person Genesis Rock; 01.04.2013