gtk: метка, которая идет многострочно, а не расширяется по горизонтали - PullRequest
0 голосов
/ 19 августа 2010

У меня есть VBox, который выглядит так:

ImportantWidget
  HSeparator
    Label

Я хочу, чтобы это окно было настолько широким, насколько необходимо ImportantWidget, а не шире. Тем не менее, Label может иногда расти очень долго. Мне нужна следующая логика: если Label может уместить весь его текст, не расширяя VBox по горизонтали (после того, как он достаточно вырос, чтобы уместиться ImportantWidget), то весь его текст должен быть в одной строке. Но если он переполнится и приведет к горизонтальному изменению размера, он должен вместо этого разделить свой текст на несколько строк.

Есть ли виджет, который уже делает это, лучше, чем Label для задачи? Если нет, что я должен использовать?

Ответы [ 3 ]

1 голос
/ 09 сентября 2010

РЕДАКТИРОВАТЬ:

пример динамической метки, которая работает в несколько строк в соответствии с размером окна и текста:

import gtk

class DynamicLabel(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)

        self.set_title("Dynamic Label")
        self.set_size_request(1, 1)
        self.set_default_size(300,300) 
        self.set_position(gtk.WIN_POS_CENTER)

        l = gtk.Label("Painfully long text " * 30)
        l.set_line_wrap(True)
        l.connect("size-allocate", self.size_request)
        ImportantWidget  = gtk.Label("ImportantWidget")

        vbox = gtk.VBox(False, 2)
        HSeparator = gtk.HSeparator()
        vbox.pack_start(ImportantWidget, False, False, 0)
        vbox.pack_start(HSeparator, False, False, 0)
        vbox.pack_start(l, False, False, 0)


        self.add(vbox)
        self.connect("destroy", gtk.main_quit)
        self.show_all()

    def size_request(self, l, s ):
        l.set_size_request(s.width -1, -1)

DynamicLabel()
gtk.main()
1 голос
/ 09 сентября 2010

Похоже, вам нужен динамически изменяемый размер ярлыка, чего GTK не делает "из коробки". В хранилище Meld есть порт Python для виджета WrapLabel от VMWare. (С этот вопрос .)

1 голос
/ 19 августа 2010

Ах, да Это показывает, как это сделать:

l = gtk.Label("Painfully long text" * 30)
l.set_line_wrap(True)
...