Source code for ipywidgets.widgets.widget_time
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
"""
Time picker widget
"""
from traitlets import Unicode, Bool, Union, CaselessStrEnum, CFloat, validate, TraitError
from .trait_types import Time, time_serialization
from .valuewidget import ValueWidget
from .widget import register
from .widget_core import CoreWidget
from .widget_description import DescriptionWidget
[docs]@register
class TimePicker(DescriptionWidget, ValueWidget, CoreWidget):
"""
Display a widget for picking times.
Parameters
----------
value: datetime.time
The current value of the widget.
disabled: bool
Whether to disable user changes.
min: datetime.time
The lower allowed time bound
max: datetime.time
The upper allowed time bound
step: float | 'any'
The time step to use for the picker, in seconds, or "any"
Examples
--------
>>> import datetime
>>> import ipydatetime
>>> time_pick = ipydatetime.TimePicker()
>>> time_pick.value = datetime.time(12, 34, 3)
"""
_view_name = Unicode("TimeView").tag(sync=True)
_model_name = Unicode("TimeModel").tag(sync=True)
value = Time(None, allow_none=True).tag(sync=True, **time_serialization)
disabled = Bool(False, help="Enable or disable user changes.").tag(sync=True)
min = Time(None, allow_none=True).tag(sync=True, **time_serialization)
max = Time(None, allow_none=True).tag(sync=True, **time_serialization)
step = Union(
(CFloat(60), CaselessStrEnum(["any"])),
help='The time step to use for the picker, in seconds, or "any".',
).tag(sync=True)
@validate("value")
def _validate_value(self, proposal):
"""Cap and floor value"""
value = proposal["value"]
if value is None:
return value
if self.min and self.min > value:
value = max(value, self.min)
if self.max and self.max < value:
value = min(value, self.max)
return value
@validate("min")
def _validate_min(self, proposal):
"""Enforce min <= value <= max"""
min = proposal["value"]
if min is None:
return min
if self.max and min > self.max:
raise TraitError("Setting min > max")
if self.value and min > self.value:
self.value = min
return min
@validate("max")
def _validate_max(self, proposal):
"""Enforce min <= value <= max"""
max = proposal["value"]
if max is None:
return max
if self.min and max < self.min:
raise TraitError("setting max < min")
if self.value and max < self.value:
self.value = max
return max