Как автоматически изменить размер текста, чтобы он соответствовал метке PyGTK фиксированного размера? - PullRequest
3 голосов
/ 17 января 2011

У меня фиксированный размер gtk.Label.Я хотел бы автоматически изменить размер текста, чтобы он вписался в метку.Есть ли элегантный способ сделать это со шрифтами, которые не имеют фиксированной ширины?

my_label = gtk.Label()

# Short text segment
my_label.set_text( "Short text segment." )

# Long text segment
### Determine required text size here. ###
my_label.set_text( "This is a really long text segment that I would like to resize."

1 Ответ

0 голосов
/ 22 января 2011

У меня не было времени, чтобы проверить это, но что-то в этом роде должно делать то, что вы хотите:

size = 12000 # thousandths of a point
temp_label = gtk.Label(my_label.get_text())
while temp_label.get_width() > my_label.get_width():
    size -= 100
    temp_label.set_attributes(pango.Attrlist().insert(pango.AttrSize(size))
my_label = temp_label

Это предполагает, что вы принудительно задаете ширину my_label напрямую.Если my_label получает свою ширину из чего-то другого (например, родительского контейнера), тогда замените my_label.get_width () на любую максимальную ширину, которую вы хотите.

По сути, это просто уменьшает размер шрифта на 1/10 отточка снова и снова, пока текст, наконец, не подходит.Не стесняйтесь изменять размер - = 100 с любым шагом, который вам нравится (чем он меньше, тем медленнее, но более мелкозернистым он будет).

Дайте мне знать, если это не совсем так, и я могу уточнить егопозже.

...