From bdfb14d391ef44d623e1c842da1b9aca593d70c6 Mon Sep 17 00:00:00 2001 From: Maic Siemering Date: Fri, 12 May 2023 10:47:28 +0200 Subject: [PATCH] UI: Support iteration over widget children (#1771) * UI: Support iteration over widget children --- arcade/gui/widgets/__init__.py | 3 +++ doc/programming_guide/release_notes.rst | 2 ++ tests/unit/gui/test_widget_tree.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/arcade/gui/widgets/__init__.py b/arcade/gui/widgets/__init__.py index d34447541..395414726 100644 --- a/arcade/gui/widgets/__init__.py +++ b/arcade/gui/widgets/__init__.py @@ -525,6 +525,9 @@ def padding(self, args: Union[int, Tuple[int, int], Tuple[int, int, int, int]]): def children(self) -> List["UIWidget"]: return [child for child, data in self._children] + def __iter__(self): + return iter(self.children) + def resize(self, *, width=None, height=None): self.rect = self.rect.resize(width=width, height=height) diff --git a/doc/programming_guide/release_notes.rst b/doc/programming_guide/release_notes.rst index bd75fd072..1925d0759 100644 --- a/doc/programming_guide/release_notes.rst +++ b/doc/programming_guide/release_notes.rst @@ -106,10 +106,12 @@ Changes * ``UIWidget.padding_bottom`` * ``UIWidget.padding_left`` * Update and add example code. + * Iterable (providing direct children) * New widgets: * :py:class:`~arcade.gui.widgets.dropdown.UIDropdown` + * :py:class:`~arcade.gui.widgets.image.UIImage` * :py:class:`~arcade.gui.widgets.slider.UISlider` * :py:class:`~arcade.gui.widgets.constructs.UIButtonRow` (`PR1580 `_ and `PR1253 `_) diff --git a/tests/unit/gui/test_widget_tree.py b/tests/unit/gui/test_widget_tree.py index 0918502e7..9ec1b1ce9 100644 --- a/tests/unit/gui/test_widget_tree.py +++ b/tests/unit/gui/test_widget_tree.py @@ -58,3 +58,19 @@ def on_event(event): # THEN assert triggered is True + + +def test_iterate_widget_children(window): + # GIVEN + parent = UIDummy() + child1 = UIDummy() + child2 = UIDummy() + child3 = UIDummy() + + # WHEN + parent.add(child1) + parent.add(child2) + child2.add(child3) + + # THEN + assert list(parent) == [child1, child2]