Skip to content Skip to sidebar Skip to footer

How To Create Nested Listboxes In Urwid?

Is it possible to put ListBoxes inside of SimpleListWalkers ? I'm trying to make nested ListBoxes, but I have this error : AttributeError: 'MyListBox' object has no attribute 'row

Solution 1:

According to the manualListBox is a box widget that contains flow widgets inside.

The difference between the types of widgets (box, flow and fixed) lies in the method of calculating their size. The details are described in the aforementioned link. In short: ListBox is informed about its size from its container, but requires its children to calculate their heights on their own. As another ListBox is inside it can't provide this value (has no rows method).

The solution is to wrap the inner ListBox in BoxAdapter that makes box widget to look and behave like flow widget:

...
widgets   = [urwid.AttrMap(urwid.Text(str(x)),None,"focus") for x in xrange(3)]
nested    = [urwid.AttrMap(urwid.Text(str(x)+"_sous"),None,"focus") for x in xrange(3)]
nested_lb = MyListBox(urwid.SimpleListWalker(nested))
lb        = MyListBox(urwid.SimpleListWalker(widgets+[urwid.BoxAdapter(nested_lb, 10)]))
...

Post a Comment for "How To Create Nested Listboxes In Urwid?"