GTK Label wrapping in a dialog
Question: I'm trying to create a **non-resizable dialog** with a label in it. This label
has a lot of text, so I want it to **wrap without making the dialog
ridiculously wide**.

For some reason, I can't find out what it takes to get GTK to allow this to
happen. I can't even find a way of setting a max-width on the dialog, which
would be great.

Here's an running example of what I mean:

    
    
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from gi.repository import Gtk
    
    class DialogExample(Gtk.Dialog):
    
        def __init__(self, parent):
            Gtk.Dialog.__init__(self, "My Dialog", parent, 0,
                (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                 Gtk.STOCK_OK, Gtk.ResponseType.OK))
    
            self.set_default_size(150, 100)
            self.set_resizable(False)
    
            label = Gtk.Label("This is a dialog to display additional information, with a bunch of text in it just to make sure it will wrap enough for demonstration purposes")
            label.set_line_wrap(True)
    
            box = self.get_content_area()
            box.add(label)
            self.show_all()
    
    class DialogWindow(Gtk.Window):
    
        def __init__(self):
            Gtk.Window.__init__(self, title="Dialog Example")
    
            self.set_default_size(250, 200)
    
    
            button = Gtk.Button("Open dialog")
            button.connect("clicked", self.on_button_clicked)
    
            self.add(button)
    
        def on_button_clicked(self, widget):
            dialog = DialogExample(self)
            response = dialog.run()
    
            if response == Gtk.ResponseType.OK:
                print "The OK button was clicked"
            elif response == Gtk.ResponseType.CANCEL:
                print "The Cancel button was clicked"
    
            dialog.destroy()
    
    win = DialogWindow()
    win.connect("delete-event", Gtk.main_quit)
    win.show_all()
    Gtk.main()
    


Answer: I solved this (besides setting the line wrap to True) putting the Gtk.Label
inside a Gtk.Table, using the FILL and SHRINK flags and setting a fixed width
for the label. Something like this:

    
    
    label = Gtk.Label("This is a dialog to display additional information, with a bunch of text in it just to make sure it will wrap enough for demonstration purposes")
    label.set_line_wrap(True)
    label.set_size_request(250, -1) # 250 or whatever width you want. -1 to keep height automatic
    
    table = Gtk.Table(1, 1, False)
    table.attach(label, 0, 1, 0, 1, Gtk.AttachOptions.SHRINK | Gtk.AttachOptions.FILL)
    

That should do the trick

