From 554fd42fdd2ddc767b79f3385358aab6e3522e2a Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Thu, 15 Feb 2018 12:35:59 +0100 Subject: [PATCH] ipywidgets python api --- beakerx/beakerx/beakerx_widgets.py | 10 ++++++++ beakerx/beakerx/easyform/easyform.py | 6 +++++ doc/python/EasyForm.ipynb | 38 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/beakerx/beakerx/beakerx_widgets.py b/beakerx/beakerx/beakerx_widgets.py index 79c352def9..1bd0c73428 100644 --- a/beakerx/beakerx/beakerx_widgets.py +++ b/beakerx/beakerx/beakerx_widgets.py @@ -49,6 +49,16 @@ def fireChanged(self, x=None): def set_value(self, new_value): self.value = new_value + def add_interface_to(target): + target.onInitListeners = list() + target.onChangeListeners = list() + target.onInit = types.MethodType(EasyFormComponent.onInit, target) + target.onChange = types.MethodType(EasyFormComponent.onChange, target) + target.fireInit = types.MethodType(EasyFormComponent.fireInit, target) + target.fireChanged = types.MethodType(EasyFormComponent.fireChanged, target) + target.set_value = types.MethodType(EasyFormComponent.set_value, target) + + class BeakerxLayout(Layout): _view_module = Unicode('@jupyter-widgets/base').tag(sync=True) diff --git a/beakerx/beakerx/easyform/easyform.py b/beakerx/beakerx/easyform/easyform.py index 2749a0e1b2..ba8b36d5cb 100644 --- a/beakerx/beakerx/easyform/easyform.py +++ b/beakerx/beakerx/easyform/easyform.py @@ -149,6 +149,12 @@ def addRadioButtons(self, *args, **kwargs): self.components[radio_buttons.description] = radio_buttons return radio_buttons + def addWidget(self, name, widget): + EasyFormComponent.add_interface_to(widget) + self.children += (widget,) + self.components[name] = widget + return widget + def __iter__(self): return iter(self.components) diff --git a/doc/python/EasyForm.ipynb b/doc/python/EasyForm.ipynb index da6b6ce462..866f3cbc99 100644 --- a/doc/python/EasyForm.ipynb +++ b/doc/python/EasyForm.ipynb @@ -273,6 +273,44 @@ "\n", "result" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## JupyterJSWidgets work with EasyForm\n", + "\n", + "The widgets from JupyterJSWidgets are compatible and can appear in forms." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from beakerx import *\n", + "from ipywidgets import * \n", + "w = IntSlider()\n", + "\n", + "f = EasyForm(\"Form and Run\")\n", + "f.addTextField(\"first\")\n", + "f.addTextField(\"last\")\n", + "f.addWidget(\"slider\", w)\n", + "f['first'] = \"First\"\n", + "f['last'] = \"Last\"\n", + "f.addButton(\"Go!\", tag=\"run\")\n", + "f" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f['slider']" + ] } ], "metadata": {