Greetings,
I've built an urwid application that makes use of several urwid
features: it looks a bit like a spreadsheet with editable/tab-able cells and
expandable rows, uses Columns, Buttons, Frames, as well as widgets that are
extensions of urwid widgets or WidgetWrap. I can say at this point that urwid
is a very useful framework and fits its niche very well.
Over the course of building this app I noticed something that might be a bug or
“user error”:
- contrary to the documentation, AttrMap does not appear to forward
method calls to ‘w’, the wrapped widget. Here is a quick repro, a modification
of Hello World:
import urwid
palette = [
('body', 'white', 'black'),
]
txt = urwid.Text(u"Hello World")
txt = urwid.AttrMap (txt, 'body')
#txt.original_widget.set_text (u"Goodbye World") # this works
txt.set_text (u"Goodbye World") # this doesn’t (but will if you use the
deprecated AttrWrap)
fill = urwid.Filler(txt, 'top')
loop = urwid.MainLoop(fill)
loop.run()
I find AttrMap to be a very useful design concept. But I think it falls short
of its intended purpose because I find myself constantly needing to insert
.base_widget in various places — AttrMap is not as transparent as the docs
suggest. A piece of urwid code will work but later break when you add an extra
AttrMap layer somewhere. Note that using AttrWrap instead makes the example
above work — even though AttrWrap is deprecated in favor of AttrMap. Several
stock urwid examples also break if AttrWrap is replaced with AttrMap, and it
originally took me a few hours to figure out why.
HTH,
Vlad
_______________________________________________
Urwid mailing list
[email protected]
http://lists.excess.org/mailman/listinfo/urwid