diff --git a/etg/sizer.py b/etg/sizer.py index a5533eab..d0a7d366 100644 --- a/etg/sizer.py +++ b/etg/sizer.py @@ -151,8 +151,12 @@ def run(): import wx.siplib return not wx.siplib.isdeleted(self) """) - c.addPyCode('Sizer.__bool__ = Sizer.__nonzero__') # For Python 3 + c.addPyMethod('__iter__', '(self)', + doc = "A Py convenience method that allows Sizers to act as iterables that will yield their wx.SizerItems." + body = "for item in self.GetChildren(): yield item") + + c.addPyCode('Sizer.__bool__ = Sizer.__nonzero__') # For Python 3 #--------------------------------------------- diff --git a/unittests/test_sizer.py b/unittests/test_sizer.py index abd0a36f..7703c972 100644 --- a/unittests/test_sizer.py +++ b/unittests/test_sizer.py @@ -71,6 +71,15 @@ class sizer_Tests(wtc.WidgetTestCase): self.assertTrue(items[1].IsSpacer()) self.assertTrue(items[2].Border == 5) + def test_iter(self): + bs = wx.BoxSizer() + widgetlist = [wx.Panel(self.frame) for _ in range(5)] + + sizeritems = [x for x in bs] + for item in sizeritems: + self.assertTrue(isinstance(item, wx.SizerItem)) + + self.assertTrue([x.GetWidget() for x in bs] == widgetlist) def test_sizerSpacers1(self): bs = wx.BoxSizer()