Part 1 - Basics.ipynb
322 lines
| 9.7 KiB
| text/plain
|
TextLexer
Jonathan Frederic
|
r14323 | { | |
"metadata": { | |||
Jonathan Frederic
|
r14342 | "cell_tags": [ | |
[ | |||
"<None>", | |||
null | |||
] | |||
], | |||
Jonathan Frederic
|
r14323 | "name": "" | |
}, | |||
"nbformat": 3, | |||
"nbformat_minor": 0, | |||
"worksheets": [ | |||
{ | |||
"cells": [ | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
Jonathan Frederic
|
r14342 | "To use IPython widgets in the notebook, the widget namespace and display function need to be imported." | |
Jonathan Frederic
|
r14323 | ] | |
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"from IPython.html import widgets # Widget definitions\n", | |||
Jonathan Frederic
|
r14342 | "from IPython.display import display # Used to display widgets in the notebook" | |
Jonathan Frederic
|
r14323 | ], | |
"language": "python", | |||
"metadata": {}, | |||
Jonathan Frederic
|
r14342 | "outputs": [], | |
Jonathan Frederic
|
r14323 | "prompt_number": 1 | |
}, | |||
{ | |||
"cell_type": "heading", | |||
"level": 1, | |||
"metadata": {}, | |||
"source": [ | |||
"Basic Widgets" | |||
] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"The IPython notebook comes preloaded with basic widgets that represent common data types. These widgets are\n", | |||
"\n", | |||
"- BoolWidget : boolean \n", | |||
"- FloatRangeWidget : bounded float \n", | |||
"- FloatWidget : unbounded float \n", | |||
"- IntRangeWidget : bounded integer \n", | |||
"- IntWidget : unbounded integer \n", | |||
"- SelectionWidget : enumeration \n", | |||
"- StringWidget : string \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", | |||
"- ButtonWidget \n", | |||
"- ContainerWidget \n", | |||
"- MulticontainerWidget \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": [ | |||
"['BoolWidget',\n", | |||
" 'ButtonWidget',\n", | |||
" 'ContainerWidget',\n", | |||
" 'FloatRangeWidget',\n", | |||
" 'FloatWidget',\n", | |||
" 'IntRangeWidget',\n", | |||
" 'IntWidget',\n", | |||
" 'MulticontainerWidget',\n", | |||
" 'SelectionWidget',\n", | |||
" 'StringWidget',\n", | |||
" 'Widget']" | |||
] | |||
} | |||
], | |||
"prompt_number": 2 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"The basic widgets can all be constructed without arguments. The following creates a FloatRangeWidget without displaying it" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"mywidget = widgets.FloatRangeWidget()" | |||
], | |||
"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. `mywidget` is displayed by" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"display(mywidget)" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 4 | |||
}, | |||
{ | |||
"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 properties (traitlets). The names of these instance properties are listed in the widget's `keys` property (as seen below). A few of these properties are common to most, if not all, widgets. The common properties are `value`, `description`, `visible`, and `disabled`. `_css`, `_add_class`, and `_remove_class` are internal properties 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": 5, | |||
"text": [ | |||
"['visible',\n", | |||
" '_css',\n", | |||
" '_add_class',\n", | |||
" '_remove_class',\n", | |||
" 'value',\n", | |||
" 'step',\n", | |||
" 'max',\n", | |||
" 'min',\n", | |||
" 'disabled',\n", | |||
" 'orientation',\n", | |||
" 'description']" | |||
] | |||
} | |||
], | |||
"prompt_number": 5 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"Changing a widget's property value will automatically update that widget everywhere it is displayed in the notebook. Here the value of `mywidget` is set. The slider shown above (after input 4) updates automatically to the new value. In reverse, 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": 6 | |||
}, | |||
{ | |||
"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": 7, | |||
"text": [ | |||
"0.0" | |||
] | |||
} | |||
], | |||
"prompt_number": 7 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"Widget property values can also be set with kwargs during the construction of the widget (as seen below)." | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"mysecondwidget = widgets.SelectionWidget(values=[\"Item A\", \"Item B\", \"Item C\"], value=\"Nothing Selected\")\n", | |||
"display(mysecondwidget)" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 8 | |||
}, | |||
{ | |||
"cell_type": "heading", | |||
"level": 1, | |||
"metadata": {}, | |||
"source": [ | |||
"Views" | |||
] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"The data types that most of the widgets represent can be displayed more than one way. A `view` is a visual representation of a widget in the notebook. In the example in the section above, the default `view` for the `FloatRangeWidget` is used. The default view is set in the widgets `default_view_name` instance property (as seen below)." | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"mywidget.default_view_name" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [ | |||
{ | |||
"metadata": {}, | |||
"output_type": "pyout", | |||
"prompt_number": 9, | |||
"text": [ | |||
"u'FloatSliderView'" | |||
] | |||
} | |||
], | |||
"prompt_number": 9 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"When a widget is displayed using `display(...)`, the `default_view_name` is used to determine what view type should be used to display the widget. View names are case sensitive. Sometimes the default view isn't the best view to represent a piece of data. To change what view is used, either the `default_view_name` can be changed or the `view_name` kwarg of `display` can be set. This also can be used to display one widget multiple ways in one output (as seen below)." | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"display(mywidget)\n", | |||
"display(mywidget, view_name=\"FloatTextView\")" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 10 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"Some views work with multiple different widget types and some views only work with one. The complete list of views and supported widgets is below. The default views are italicized.\n", | |||
"\n", | |||
"| Widget Name | View Names |\n", | |||
"|:-----------------------|:--------------------|\n", | |||
"| BoolWidget | *CheckboxView* |\n", | |||
"| | ToggleButtonView |\n", | |||
"| ButtonWidget | *ButtonView* |\n", | |||
"| ContainerWidget | *ContainerView* |\n", | |||
"| FloatRangeWidget | *FloatSliderView* |\n", | |||
"| | FloatTextView |\n", | |||
"| | ProgressView |\n", | |||
"| FloatWidget | *FloatTextView* |\n", | |||
"| IntRangeWidget | *IntSliderView* |\n", | |||
"| | IntTextView |\n", | |||
"| | ProgressView |\n", | |||
"| IntWidget | *IntTextView* |\n", | |||
"| MulticontainerWidget | AccordionView |\n", | |||
"| | *TabView* |\n", | |||
"| SelectionWidget | ToggleButtonsView |\n", | |||
"| | RadioButtonsView |\n", | |||
"| | *DropdownView* |\n", | |||
"| StringWidget | LabelView |\n", | |||
"| | TextAreaView |\n", | |||
"| | *TextBoxView* |\n" | |||
] | |||
} | |||
], | |||
"metadata": {} | |||
} | |||
] | |||
} |