diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py index 7b109b5..3c2cb74 100644 --- a/IPython/html/widgets/widget.py +++ b/IPython/html/widgets/widget.py @@ -176,13 +176,15 @@ class Widget(LoggingConfigurable): self._comm = None - def _handle_displayed(self, view_name): + def _handle_displayed(self, view_name, parent=None): """Called when a view has been displayed for this widget instance Parameters ---------- view_name: unicode - Name of the view that was displayed.""" + Name of the view that was displayed. + parent: Widget instance [optional] + Widget that this widget should be displayed as a child of.""" for handler in self._display_callbacks: if callable(handler): argspec = inspect.getargspec(handler) @@ -199,6 +201,8 @@ class Widget(LoggingConfigurable): handler(self) elif nargs == 2: handler(self, view_name) + elif nargs == 3: + handler(self, view_name, parent) else: raise TypeError('Widget display callback must ' \ 'accept 0-2 arguments, not %d.' % nargs) @@ -371,6 +375,7 @@ class Widget(LoggingConfigurable): - callback() - callback(sender) - callback(sender, view_name) + - callback(sender, view_name, parent) remove: bool True if the callback should be unregistered.""" if remove and callback in self._display_callbacks: @@ -403,12 +408,13 @@ class Widget(LoggingConfigurable): # Show view. if self.parent is None or self.parent._comm is None: self._comm.send({"method": "display", "view_name": view_name}) + self._handle_displayed(view_name) else: self._comm.send({"method": "display", "view_name": view_name, "parent": self.parent._comm.comm_id}) + self._handle_displayed(view_name, self.parent) self._displayed = True - self._handle_displayed(view_name) # Now display children if any. for child in self._children: