Как создать многострочную кнопку - PullRequest
0 голосов
/ 13 мая 2010

Я пытаюсь создать многострочную кнопку с PyGTK. У меня есть метка, добавленная в мой подкласс gtk.Button, но у меня возникли проблемы с назначением метки кнопке. Если метка имеет собственный размер, обтекание текстом отсутствует даже с label.set_line_wrap(True), потому что метка просто изменяет размеры за пределы кнопки. Я бы установил размер метки равным размеру кнопки, но до тех пор, пока я явно не установил размер кнопки с помощью set_size_request, я не смог бы выяснить, насколько велика кнопка (она упакована в таблицу) .

Есть предложения?

Ответы [ 2 ]

1 голос
/ 13 мая 2010

В общем, это невозможно с GTK +, потому что нет стадии, когда виджеты "согласовывают" размеры. Вместо этого виджеты сообщают свой требуемый размер, и после этого контейнер выделяет некоторые области (обычно равные или превышающие требуемые). В GTK + 3 будет согласование ширины и высоты, поэтому, если вашей кнопке (а точнее ее метке) в любом случае будет выделено несколько строк, она сможет запросить меньшую ширину и перенести свой текст.

В 2.x лучшее, что вы можете сделать, это, вероятно, использовать width_chars свойство gtk.Label:

import gtk

window = gtk.Window ()
align  = gtk.Alignment (0.5, 0.5)
button = gtk.Button ('a very long, possibly multiline text')

label = button.child
label.props.wrap = True
label.props.width_chars = 20

window.set_default_size (500, 500)
window.connect ('destroy', lambda *ignored: gtk.main_quit ())

window.add (align)
align.add (button)
window.show_all ()

gtk.main ()
0 голосов
/ 20 мая 2016

Я обнаружил, что в Python 3.4 GTK + 3 все, что вам нужно сделать, это добавить \n, где вы хотите перерыв. Он не переносится автоматически, но вы можете иметь многострочные метки для объектов кнопок. Например,

self.button = Gtk.Button(label="A lotta text \n and a lotta more.")
...