From 43c223d3d2a1bf759d8100e63129ad32ace1bdb7 Mon Sep 17 00:00:00 2001 From: Mesalu Date: Thu, 8 Feb 2018 21:19:45 -0800 Subject: [PATCH] Add iterability to sizer classes and corresponding unittest --- etg/sizer.py | 6 +++++- unittests/test_sizer.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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()