на основе this Я сделал один слайдер даты и теперь хотел сделать шаг go дальше и анимировать его с помощью виджета воспроизведения. К сожалению, виджет воспроизведения, похоже, не принимает значения дня, и теперь я хотел спросить, есть ли более простой способ, чем присвоить каждой дате значение Int с помощью другой функции?
from datetime import datetime
class DateRangePicker(object):
def __init__(self,start,end,freq='D',fmt='%Y-%m-%d'):
"""
Parameters
----------
start : string or datetime-like
Left bound of the period
end : string or datetime-like
Left bound of the period
freq : string or pandas.DateOffset, default='D'
Frequency strings can have multiples, e.g. '5H'
fmt : string, defauly = '%Y-%m-%d'
Format to use to display the selected period
"""
self.date_range=pd.date_range(start=start,end=end,freq=freq)
options = [(item.strftime(fmt),item) for item in self.date_range]
self.slider_start = widgets.SelectionSlider(
options=options,
continuous_update=False
)
self.slider_start.on_trait_change(self.slider_start_changed, 'value')
self.widget = widgets.Box(children=[self.slider_start])
def slider_start_changed(self,key,value):
self._observe(start=self.slider_start.value)
def display(self):
display(self.slider_start)
def _observe(self,**kwargs):
if hasattr(self,'observe'):
self.observe(**kwargs)
def fct(start):
print(start)
#date1 = DateRangePicker(start='2020-02-17',end="2020-03-27",freq='D',fmt='%Y-%m-%d')
#date1.observe=fct
#date1.display()
start_date = datetime(2020, 2, 17)
end_date = datetime(2020, 3, 27)
dates = pd.date_range(start_date, end_date, freq='D')
date = [(date.strftime(' %d %b %Y '), date) for date in dates]
date_slider = widgets.SelectionSlider(
options=date,
orientation='horizontal',
layout={'width': 'flex'}
)
date_slider
play = widgets.Play(
value=start_date,
min=start_date,
max=end_date,
step=1,
interval=500,
description="Press play",
disabled=False
)
widgets.jslink((play, 'value'), (date_slider, 'value'))
widgets.HBox([play, date_slider])