On Tue, 2011-02-22 at 21:13 +0800, Jason Heeris wrote: 
> On 22 February 2011 20:30, Adam Tauno Williams <[email protected]> wrote:
> > available space - just wrap incorrectly.  Any hints for displaying
> > multi-lined / long-lined text in a label more elegantly?
> I think I've had the same problem. You may be interested in this:
> http://stackoverflow.com/questions/1893748/pygtk-dynamic-label-wrapping/1911179#1911179
> ...which I've used with good results.

You get a gold star!  This works.

I put the method -

def label_size_allocate_hack(widget, allocation):
    "Callback which re-allocates the size of a label."
    layout = widget.get_layout()
    lw_old, lh_old = layout.get_size()
    # fixed width labels
    if lw_old / pango.SCALE == allocation.width:
        return
    # set wrap width to the pango.Layout of the labels
    layout.set_width(allocation.width * pango.SCALE)
    lw, lh = layout.get_size()  # lw is unused.
    if lh_old != lh:
        widget.set_size_request(-1, lh / pango.SCALE)

- in my hacks.py file, and then -

from hacks                  import label_size_allocate_hack

...

label = gtk.Label()
label.set_markup('<tt>{0}</tt>'.format(glib.markup_escape_text(annotation['comment'])))
label.set_alignment(0.0, 0.0)
label.set_line_wrap(True)
label.set_selectable(True)
label.connect_after("size-allocate", label_size_allocate_hack)
vbox.pack_end(label, expand=True, fill=True, padding=2)

- and the labels seem to be behave more sanely, at least horizontally.
Now they are jumping up and down vertically within the vbox when the
window is resized.  Hmm.

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to