File tree Expand file tree Collapse file tree 4 files changed +29
-5
lines changed Expand file tree Collapse file tree 4 files changed +29
-5
lines changed Original file line number Diff line number Diff line change @@ -59,7 +59,10 @@ def _mgui_set_enabled(self, enabled: bool):
5959
6060 def _mgui_get_parent (self ):
6161 # TODO: how does ipywidgets handle this?
62- return getattr (self ._ipywidget , "parent" , None )
62+ # return getattr(self._ipywidget, "parent", None)
63+ raise NotImplementedError (
64+ "parent not implemented for ipywidgets backend. Please open an issue"
65+ )
6366
6467 def _mgui_set_parent (self , widget ):
6568 # TODO: how does ipywidgets handle this?
Original file line number Diff line number Diff line change 2626
2727from magicgui .types import FileDialogMode
2828from magicgui .widgets import Widget , protocols
29+ from magicgui .widgets ._concrete import _LabeledWidget
2930
3031if TYPE_CHECKING :
3132 import numpy
@@ -82,9 +83,18 @@ def _mgui_get_enabled(self) -> bool:
8283 def _mgui_set_enabled (self , enabled : bool ) -> None :
8384 self ._qwidget .setEnabled (enabled )
8485
85- # TODO: this used to return _magic_widget ... figure out what we should be returning
86- def _mgui_get_parent (self ) -> QObject | None : # type: ignore
87- return self ._qwidget .parent ()
86+ def _mgui_get_parent (self ) -> Widget | None :
87+ par = self ._qwidget .parent ()
88+ # FIXME: This whole thing is hacky.
89+ while par is not None :
90+ mgui_wdg = getattr (par , "_magic_widget" , None )
91+ # the labeled widget itself should be considered a "hidden" layer.
92+ if isinstance (mgui_wdg , Widget ) and not isinstance (
93+ mgui_wdg , _LabeledWidget
94+ ):
95+ return mgui_wdg
96+ par = par .parent ()
97+ return None
8898
8999 def _mgui_set_parent (self , widget : Widget ) -> None :
90100 self ._qwidget .setParent (widget .native if widget else None )
Original file line number Diff line number Diff line change @@ -203,3 +203,14 @@ def _on_clicked(self):
203203 ...
204204
205205 assert isinstance (C (), widgets .Container )
206+
207+
208+ def test_parent ():
209+ lbl = widgets .Label ()
210+ inner = widgets .Container (widgets = [lbl ])
211+ outer = widgets .Container ()
212+ outer .append (inner )
213+
214+ assert lbl .parent is inner
215+ assert inner .parent is outer
216+ assert outer .parent is None
Original file line number Diff line number Diff line change @@ -198,7 +198,7 @@ def test_basic_widget_attributes():
198198
199199 assert widget .parent is None
200200 container .append (widget )
201- assert widget .parent is container . native
201+ assert widget .parent is container
202202 widget .parent = None
203203 assert widget .parent is None
204204 assert widget .label == "my name"
You can’t perform that action at this time.
0 commit comments