{ "metadata": { "cell_tags": [ [ "", null ] ], "name": "", "signature": "sha256:9a70b52f0b16861d1cd6a8342b233247958977a52bde8d3efd69d21131ce1926" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "To use IPython widgets in the notebook, the widget namespace needs to be imported." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.html import widgets # Widget definitions\n", "from IPython.display import display # Used to display widgets in the notebook" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Basic Widgets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "IPython comes with basic widgets that represent common interactive controls. These widgets are\n", "\n", "- CheckboxWidget\n", "- ToggleButtonWidget\n", "- FloatSliderWidget\n", "- BoundedFloatTextWidget\n", "- FloatProgressWidget\n", "- FloatTextWidget\n", "- ImageWidget\n", "- IntSliderWidget\n", "- BoundedIntTextWidget\n", "- IntProgressWidget\n", "- IntTextWidget\n", "- ToggleButtonsWidget\n", "- RadioButtonsWidget\n", "- DropdownWidget\n", "- SelectWidget\n", "- HTMLWidget\n", "- LatexWidget\n", "- TextareaWidget\n", "- TextWidget\n", "- ButtonWidget\n", "\n", "A few special widgets are also included, that can be used to capture events and change how other widgets are displayed. These widgets are\n", "\n", "- ContainerWidget\n", "- PopupWidget\n", "- AccordionWidget\n", "- TabWidget\n", "\n", "To see the complete list of widgets, one can execute the following" ] }, { "cell_type": "code", "collapsed": false, "input": [ "[widget for widget in dir(widgets) if widget.endswith('Widget')]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "['AccordionWidget',\n", " 'BoundedFloatTextWidget',\n", " 'BoundedIntTextWidget',\n", " 'ButtonWidget',\n", " 'CheckboxWidget',\n", " 'ContainerWidget',\n", " 'DOMWidget',\n", " 'DropdownWidget',\n", " 'FloatProgressWidget',\n", " 'FloatSliderWidget',\n", " 'FloatTextWidget',\n", " 'HTMLWidget',\n", " 'ImageWidget',\n", " 'IntProgressWidget',\n", " 'IntSliderWidget',\n", " 'IntTextWidget',\n", " 'LatexWidget',\n", " 'PopupWidget',\n", " 'RadioButtonsWidget',\n", " 'SelectWidget',\n", " 'TabWidget',\n", " 'TextWidget',\n", " 'TextareaWidget',\n", " 'ToggleButtonWidget',\n", " 'ToggleButtonsWidget',\n", " 'Widget']" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The basic widgets all have sensible default values. Create a *FloatSliderWidget* without displaying it:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mywidget = widgets.FloatSliderWidget()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Constructing a widget does not display it on the page. To display a widget, the widget must be passed to the IPython `display(object)` method or must be returned as the last item in the cell. `mywidget` is displayed by" ] }, { "cell_type": "code", "collapsed": false, "input": [ "display(mywidget)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "or" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mywidget" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's important to realize that widgets are not the same as output, even though they are displayed with `display`. Widgets are drawn in a special widget area. That area is marked with a close button which allows you to collapse the widgets. Widgets cannot be interleaved with output. Doing so would break the ability to make simple animations using `clear_output`.\n", "\n", "Widgets are manipulated via special instance attributes (traitlets). The names of these traitlets are listed in the widget's `keys` attribute (as seen below). A few of these attributes are common to most widgets. The basic attributes are `value`, `description`, `visible`, and `disabled`. `_css` and `_view_name` are private attributes that exist in all widgets and should not be modified." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mywidget.keys" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "['_view_name',\n", " 'orientation',\n", " 'min',\n", " 'max',\n", " '_css',\n", " 'value',\n", " 'disabled',\n", " 'visible',\n", " 'step',\n", " 'description']" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Changing a widget's attribute will automatically update that widget everywhere it is displayed in the notebook. Here, the `value` attribute of `mywidget` is set. The slider shown above updates automatically with the new value. Syncing also works in the other direction - changing the value of the displayed widget will update the property's value." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mywidget.value = 25.0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "After changing the widget's value in the notebook by hand to 0.0 (sliding the bar to the far left)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mywidget.value" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "25.0" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Widget values can also be set with kwargs during the construction of the widget (as seen below)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mysecondwidget = widgets.RadioButtonsWidget(values=[\"Item A\", \"Item B\", \"Item C\"], value=\"Item A\")\n", "display(mysecondwidget)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "mysecondwidget.value" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "'Item A'" ] } ], "prompt_number": 10 } ], "metadata": {} } ] }