[Urwid] [PATCH] Pile updating methods
Sébastien Pierre
sebastien at xprima.com
Mon Jul 17 15:18:09 EDT 2006
Hi,
As I needed to update a Pile widget according to user interaction, I
implemented some additional methods in the Pile class. Here is the
small patch that implements "add_widget", "remove_widget" and
"remove_widgets", which were sufficient for my needs.
Is it consistent with the current URWID design ?
-- Sébastien
--- /home/sebastien/Desktop/urwid-0.9.5/urwid/widget.py 2006-07-14 21:26:45.000000000 -0400
+++ /home/sebastien/Local/lib/python2.4/site-packages/urwid/widget.py 2006-07-17 15:13:26.000000000 -0400
@@ -1806,26 +1806,41 @@
If the pile is treated as a box widget there must be at least
one 'weight' tuple in widget_list.
"""
- self.widget_list = widget_list
- self.item_types = []
- for i in range(len(widget_list)):
- w = widget_list[i]
- if type(w) != type(()):
- self.item_types.append(('weight',1))
- elif w[0] == 'flow':
- f, widget = w
- self.widget_list[i] = widget
- self.item_types.append((f,None))
- elif w[0] in ('fixed', 'weight'):
- f, height, widget = w
- self.widget_list[i] = widget
- self.item_types.append((f,height))
- else:
- raise PileError, "widget list item invalid %s" % `w`
-
+ self.widget_list = []
+ self.item_types = []
+ map(self.add_widget, widget_list)
self.set_focus(focus_item)
self.pref_col = None
+ def add_widget( self, widget ):
+ """Adds a widget to this pile"""
+ w = widget
+ self.widget_list.append(widget)
+ if type(w) != type(()):
+ self.item_types.append(('weight',1))
+ elif w[0] == 'flow':
+ f, widget = w
+ self.widget_list[i] = widget
+ self.item_types.append((f,None))
+ elif w[0] in ('fixed', 'weight'):
+ f, height, widget = w
+ self.widget_list[i] = widget
+ self.item_types.append((f,height))
+ else:
+ raise PileError, "widget list item invalid %s" % `w`
+
+ def remove_widget( self, widget ):
+ """Removes a widget from this pile"""
+ if type(widget) != type(()): widget = widget[1]
+ i = self.widget_list.index(widget)
+ del self.widget_list[i]
+ del self.item_types[i]
+
+ def remove_widgets( self ):
+ """Removes all widgets from this pile"""
+ self.widget_list = []
+ self.item_types = []
+
def selectable(self):
"""Return True if the focus item is selectable."""
return self.focus_item.selectable()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: urwid-pile_update.patch
Type: application/octet-stream
Size: 1959 bytes
Desc: not available
Url : http://lists.excess.org/pipermail/urwid/attachments/20060717/d9a7bc9c/urwid-pile_update.obj
More information about the Urwid
mailing list