Skip to content

Commit 28ab143

Browse files
authored
Merge pull request #1823 from SylvainCorlay/selection-container-default
Fix selection container default index
2 parents e643166 + 776576f commit 28ab143

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

ipywidgets/widgets/widget_selectioncontainer.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@
1010
from .widget_box import Box
1111
from .widget import register
1212
from .widget_core import CoreWidget
13-
from traitlets import Unicode, Dict, CInt, TraitError, validate
13+
from traitlets import Unicode, Dict, CInt, TraitError, validate, observe
1414

1515

1616
class _SelectionContainer(Box, CoreWidget):
1717
"""Base class used to display multiple child widgets."""
1818
_titles = Dict(help="Titles of the pages").tag(sync=True)
1919
selected_index = CInt(
2020
help="""The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.""",
21-
allow_none=True
21+
allow_none=True,
22+
default_value=None
2223
).tag(sync=True)
2324

2425
@validate('selected_index')
@@ -28,6 +29,11 @@ def _validated_index(self, proposal):
2829
else:
2930
raise TraitError('Invalid selection: index out of bounds')
3031

32+
@observe('children')
33+
def _observe_children(self, change):
34+
if self.selected_index is not None and len(change.new) < self.selected_index:
35+
self.selected_index = None
36+
3137
# Public methods
3238
def set_title(self, index, title):
3339
"""Sets the title of a container page.
@@ -79,6 +85,10 @@ class Tab(_SelectionContainer):
7985
_view_name = Unicode('TabView').tag(sync=True)
8086
_model_name = Unicode('TabModel').tag(sync=True)
8187

88+
def __init__(self, **kwargs):
89+
if 'children' in kwargs and 'selected_index' not in kwargs and len(kwargs['children']) > 0:
90+
kwargs['selected_index'] = 0
91+
super(Tab, self).__init__(**kwargs)
8292

8393
@register
8494
class Stacked(_SelectionContainer):

packages/controls/src/widget_selectioncontainer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class SelectionContainerModel extends BoxModel {
3131
return {
3232
...super.defaults(),
3333
_model_name: 'SelectionContainerModel',
34-
selected_index: 0,
34+
selected_index: null,
3535
_titles: {}
3636
};
3737
}

packages/schema/jupyterwidgetmodels.latest.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Attribute | Type | Default | Help
7878
`box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box.
7979
`children` | array of reference to Widget widget | `[]` | List of widget children
8080
`layout` | reference to Layout widget | reference to new instance |
81-
`selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
81+
`selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
8282
`tabbable` | `null` or boolean | `null` | Is widget tabbable?
8383
`tooltip` | `null` or string | `null` | A tooltip caption.
8484

@@ -956,7 +956,7 @@ Attribute | Type | Default | Help
956956
`box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box.
957957
`children` | array of reference to Widget widget | `[]` | List of widget children
958958
`layout` | reference to Layout widget | reference to new instance |
959-
`selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
959+
`selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
960960
`tabbable` | `null` or boolean | `null` | Is widget tabbable?
961961
`tooltip` | `null` or string | `null` | A tooltip caption.
962962

@@ -975,7 +975,7 @@ Attribute | Type | Default | Help
975975
`box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box.
976976
`children` | array of reference to Widget widget | `[]` | List of widget children
977977
`layout` | reference to Layout widget | reference to new instance |
978-
`selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
978+
`selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.
979979
`tabbable` | `null` or boolean | `null` | Is widget tabbable?
980980
`tooltip` | `null` or string | `null` | A tooltip caption.
981981

0 commit comments

Comments
 (0)