Claudiu
Claudiu

Reputation: 229321

gtk: label which goes multi-line instead of expanding horizontally

I have a VBox which looks like this:

ImportantWidget
  HSeparator
    Label

I want this window to be only as wide as ImportantWidget needs to be, and no wider. However, the Label can sometimes grow to be very long. I want the following logic: if Label can fit all its text without expanding the VBox horizontally (after it has grown enough to fit ImportantWidget), then its text should all be on one line. But if it would overflow and cause horizontal resizing, then it should instead split its text across multiple lines.

Is there a widget that does this already, that's better than Label for the task? If not, what should I use?

Upvotes: 0

Views: 4573

Answers (3)

killown
killown

Reputation: 4917

EDIT:

example of a dynamic label who works in multi-line according to the size of the window and text:

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()

Upvotes: 1

detly
detly

Reputation: 30332

It looks like you want a dynamically resizing label, which GTK doesn't do out of the box. There's a Python port of VMWare's WrapLabel widget in the Meld repository. (From this question.)

Upvotes: 1

Claudiu
Claudiu

Reputation: 229321

Ah yes this shows how to do it:

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

Upvotes: 1

Related Questions