Perfect! Thanks, that helps a lot. Turns out the reason I was having so many problems with SimpleListWalker is because my data was nested inside an extra pair of square braces :/<br><br>What makes SimpleListWalker inappropriate for larger lists? For a quick test I used Text rather than Button, but I&#39;m able to scroll through all 2600 conversation threads rather quickly. No CPU spikes or anything.<br>
<br>This application is a learning experiment, so while I value the ease and simplicity of ready-made classes a-la SimpleListWalker, if there&#39;s a better or more &quot;correct&quot; way of doing what I&#39;m trying to accomplish, I&#39;d love to learn.<br>
<br>Dominic<br><br><div class="gmail_quote">On Fri, Jun 19, 2009 at 9:13 AM, Ian Ward <span dir="ltr">&lt;<a href="mailto:ian@excess.org">ian@excess.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Yes, browse.py could use some cleaning up and better comments.<br>
<br>
For short lists SimpleListWalker is just fine.  Yes, it should contain a<br>
list of flow widgets.<br>
<font color="#888888"><br>
Ian<br>
</font><div><div></div><div class="h5"><br>
Dominic LoBue wrote:<br>
&gt; Ian,<br>
&gt;<br>
&gt; Thanks for clearing that up for me. I&#39;ve looked through browse.py<br>
&gt; several times, but I just get lost every time. I really don&#39;t need<br>
&gt; anything more complex than the SimpleListWalker or the<br>
&gt; PollingListWalker, as I&#39;m not planning on showing anymore more than a<br>
&gt; short summary of the conversation. I don&#39;t have any plans to expand<br>
&gt; the conversation in the index view.<br>
&gt;<br>
&gt; I take it that while SimpleListWalker acts like a regular list, its<br>
&gt; supposed to be a list of widgets, correct? Meaning that the data would<br>
&gt; be structured from the ListBox on down like so:<br>
&gt; urwid.ListBox(<br>
&gt;     urwid.SimpleListWalker([<br>
&gt;         urwid.Button(conversation), urwid.Button(conversation) ]))<br>
&gt;<br>
&gt;<br>
&gt; Dominic<br>
&gt;<br>
&gt; On Fri, Jun 19, 2009 at 5:46 AM, Ian Ward&lt;<a href="mailto:ian@excess.org">ian@excess.org</a>&gt; wrote:<br>
&gt;&gt; A ListWalker is used by the ListBox class to determine what widgets are<br>
&gt;&gt; displayed in the ListBox, without the ListBox needing to know how that<br>
&gt;&gt; list is generated.<br>
&gt;&gt;<br>
&gt;&gt; SimpleListWalker acts like a regular list, so you can add and remove<br>
&gt;&gt; items from it and the ListBox will be updated.<br>
&gt;&gt;<br>
&gt;&gt; PollingListWalker is a class for maintaining backwards compatibility<br>
&gt;&gt; with old versions of Urwid that would let you pass a list in to the<br>
&gt;&gt; ListBox constructor.  It has to check the list contents each time the<br>
&gt;&gt; ListBox may be updated, making caching useless.  You don&#39;t want to use<br>
&gt;&gt; it for new code.<br>
&gt;&gt;<br>
&gt;&gt; What you need is your own custom ListWalker class.  See the browse.py<br>
&gt;&gt; example, it has a custom ListWalker that displays a tree view of files<br>
&gt;&gt; on the filesystem, with the ability to expand and collapse that tree.<br>
&gt;&gt;<br>
&gt;&gt; Ian<br>
&gt;&gt;<br>
&gt;&gt; Dominic LoBue wrote:<br>
&gt;&gt;&gt; Hello,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m writing an email reader with urwid, but I&#39;m confused as to how the<br>
&gt;&gt;&gt; SimpleListWalker class works. Is it just a metaclass that you can<br>
&gt;&gt;&gt; extend to make writing your own custom listwalker easier, or should<br>
&gt;&gt;&gt; you be able to use it on its own?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Also, what&#39;s the difference between SimpleListWalker and<br>
&gt;&gt;&gt; PollingListWalker? My application is going to thread emails and the<br>
&gt;&gt;&gt; index view is going to show conversations (like gmail), with<br>
&gt;&gt;&gt; conversations with recent activity pushed to the top, so I&#39;m not sure<br>
&gt;&gt;&gt; which walker is more appropriate, or if its even necessary to bother<br>
&gt;&gt;&gt; with.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Keep up the good work with urwid!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Dominic<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Urwid mailing list<br>
&gt;&gt;&gt; <a href="mailto:Urwid@lists.excess.org">Urwid@lists.excess.org</a><br>
&gt;&gt;&gt; <a href="http://lists.excess.org/mailman/listinfo/urwid" target="_blank">http://lists.excess.org/mailman/listinfo/urwid</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Urwid mailing list<br>
&gt;&gt; <a href="mailto:Urwid@lists.excess.org">Urwid@lists.excess.org</a><br>
&gt;&gt; <a href="http://lists.excess.org/mailman/listinfo/urwid" target="_blank">http://lists.excess.org/mailman/listinfo/urwid</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Urwid mailing list<br>
&gt; <a href="mailto:Urwid@lists.excess.org">Urwid@lists.excess.org</a><br>
&gt; <a href="http://lists.excess.org/mailman/listinfo/urwid" target="_blank">http://lists.excess.org/mailman/listinfo/urwid</a><br>
&gt;<br>
<br>
<br>
<br>
_______________________________________________<br>
Urwid mailing list<br>
<a href="mailto:Urwid@lists.excess.org">Urwid@lists.excess.org</a><br>
<a href="http://lists.excess.org/mailman/listinfo/urwid" target="_blank">http://lists.excess.org/mailman/listinfo/urwid</a><br>
<br>
</div></div></blockquote></div><br>