ipywidgets 中的自定义 DatePicker

May*_*har 5 python ipython python-3.x jupyter-notebook ipywidgets

我正在使用 DatePicker 小部件来选择日期,我必须根据这些日期在 Jupyter 笔记本程序中执行一些任务。DatePicker 小部件是使用 ipywidget 库创建的。

我现在面临的问题是它显示了月份和年份的所有日期。

有什么方法可以禁用包含我的应用程序的所有有效日期的列表中不存在的日期。

例如,假设我有一个日期列表,其中包含 2018-12-25、2019-01-09 和 2019-01-13。所以现在,我只想在 DatePicker 小部件中启用这些日期,而应禁用其余日期。

请建议和帮助。!!!

Sta*_*e26 0

它在幕后使用 html 日期输入,显然只能限制最小和最大日期。看这里

这对于我的用例来说已经足够了,但我在官方文档中找不到任何有帮助的内容。我确实找到了解决该问题的方法,方法是使用 javascript 在生成的 html 输入框中设置 min 和 max 标签:

%matplotlib widget

import ipywidgets as widgets
from IPython.display import display, Javascript

date_picker = widgets.DatePicker(
    description='Pick a Date',
    disabled=False,
)
date_picker.add_class("start-date")

script = Javascript("\
                const query = '.start-date > input:first-of-type'; \
                document.querySelector(query).setAttribute('min', '2020-12-01'); \
                document.querySelector(query).setAttribute('max', '2021-01-01'); \
        ")

display(date_picker)
display(script)
Run Code Online (Sandbox Code Playgroud)

它会生成一个带有正确 html 标签的小部件来限制用户输入:

<div class="lm-Widget p-Widget jupyter-widgets widget-inline-hbox widget-datepicker start-date">
    <label class="widget-label" style="" title="Pick a Date" for="26e68439-2334-4335-93e2-9d9903607aab">Pick a Date</label>
    <input type="date" id="26e68439-2334-4335-93e2-9d9903607aab" min="2020-12-01" max="2021-01-01">
</div>
Run Code Online (Sandbox Code Playgroud)