<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Greetings,<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>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.</div><div><br></div><div>Over the course of building this app I noticed something that might be a bug or “user error”:</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>- 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:</div><div><br></div><div><span style="font-size: small; background-color: rgb(255, 255, 255);">import urwid</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">palette = [</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp; ('body',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'white',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'black'),</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">]</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">txt = urwid.Text(u"Hello World")</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">txt = urwid.AttrMap (txt, 'body')</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">#txt.original_widget.set_text (u"Goodbye World") # this works</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="background-color: rgb(255, 255, 255);"><font size="2">txt.set_text (u"Goodbye World") # this doesn’t (but will if you use the deprecated AttrWrap)</font></span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">fill = urwid.Filler(txt, 'top')</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">loop = urwid.MainLoop(fill)</span><br style="font-size: small; background-color: rgb(255, 255, 255);"><span style="font-size: small; background-color: rgb(255, 255, 255);">loop.run()</span></div><div><span style="font-size: small; background-color: rgb(255, 255, 255);"><br></span></div><div><span style="background-color: rgb(255, 255, 255);"><font size="2">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&nbsp;— 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&nbsp;— 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.</font></span></div><div><span style="background-color: rgb(255, 255, 255);"><font size="2"><br></font></span></div><div><span style="background-color: rgb(255, 255, 255);"><font size="2">HTH,</font></span></div><div><span style="background-color: rgb(255, 255, 255);"><font size="2">Vlad&nbsp;</font></span></div><div><span style="background-color: rgb(255, 255, 255);"><font size="2"><br></font></span></div><div><br></div></body></html>