diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py
index 6c1f38f..8615c59 100644
--- a/IPython/html/widgets/widget.py
+++ b/IPython/html/widgets/widget.py
@@ -180,15 +180,13 @@ class Widget(LoggingConfigurable):
self.send_state(key=name)
- def _handle_displayed(self, view_name, parent=None):
+ def _handle_displayed(self, **kwargs):
"""Called when a view has been displayed for this widget instance
Parameters
----------
- view_name: unicode
- Name of the view that was displayed.
- parent: Widget instance [optional]
- Widget that this widget should be displayed as a child of."""
+ [view_name]: unicode (optional kwarg)
+ Name of the view that was displayed."""
for handler in self._display_callbacks:
if callable(handler):
argspec = inspect.getargspec(handler)
@@ -204,12 +202,9 @@ class Widget(LoggingConfigurable):
elif nargs == 1:
handler(self)
elif nargs == 2:
- handler(self, view_name)
- elif nargs == 3:
- handler(self, view_name, parent)
+ handler(self, kwargs.get('view_name', None))
else:
- raise TypeError('Widget display callback must ' \
- 'accept 0-2 arguments, not %d.' % nargs)
+ handler(self, **kwargs)
# Public methods
@@ -375,7 +370,8 @@ class Widget(LoggingConfigurable):
- callback()
- callback(sender)
- callback(sender, view_name)
- - callback(sender, view_name, parent)
+ - callback(sender, **kwargs)
+ kwargs from display call passed through without modification.
remove: bool
True if the callback should be unregistered."""
if remove and callback in self._display_callbacks:
@@ -385,7 +381,7 @@ class Widget(LoggingConfigurable):
# Support methods
- def _repr_widget_(self, view_name=None):
+ def _repr_widget_(self, **kwargs):
"""Function that is called when `IPython.display.display` is called on
the widget.
@@ -393,8 +389,7 @@ class Widget(LoggingConfigurable):
----------
view_name: unicode (optional)
View to display in the frontend. Overrides default_view_name."""
- if not view_name:
- view_name = self.default_view_name
+ view_name = kwargs.get('view_name', self.default_view_name)
# Create a communication.
self._open_communication()
@@ -405,12 +400,11 @@ class Widget(LoggingConfigurable):
# Show view.
if self.parent is None or self.parent._comm is None:
self._send({"method": "display", "view_name": view_name})
- self._handle_displayed(view_name)
else:
self._send({"method": "display",
"view_name": view_name,
"parent": self.parent._comm.comm_id})
- self._handle_displayed(view_name, self.parent)
+ self._handle_displayed(**kwargs)
self._displayed = True
# Now display children if any.