ipywidgets 小工具 - 日期选择器 - Mozilla Firefox 的问题

问题描述

当我使用 Firefox 并单击日期选择器旁边的 x 时,我收到以下错误消息:

Chrome 不会发生这种情况,通过阅读 Web 官方网页,它应该也适用于 Firefox,您能帮忙吗?

enter image description here

这里是代码

from ipywidgets import DatePicker,FloatText,HBox,interactive_output,Text
import datetime
from dateutil.relativedelta import relativedelta

ddecW = DatePicker(value=datetime.date.today() + relativedelta(months=2,day=1))
dobW = DatePicker(value=datetime.date.today() + relativedelta(years=-18))
etaW = FloatText(description='Età')


ui = HBox([ddecW,dobW,etaW])


def f(end,start,age):
    etaW.value = round((end - start).days/365.25,1)

out = interactive_output(f,{'end': ddecW,'start': dobW,'age': etaW})

display(ui,out)

解决方法

该函数正在尝试计算 dateNone 之间的差异,因此出现错误消息。在这种情况下,您的输出小部件应该显示什么? 0?

另外,因为您在 etaW 调用中包含了 interactive_output 小部件,所以当您设置 eta.value 时,这将再次触发 f,从而导致递归循环。更好的方法是下面的方法,或者我会避免使用 interactive_output,而只使用 observe 函数。

from ipywidgets import DatePicker,FloatText,HBox,interactive_output,Text
import datetime
from dateutil.relativedelta import relativedelta
import numpy as np

ddecW = DatePicker(value=datetime.date.today() + relativedelta(months=2,day=1))
dobW = DatePicker(value=datetime.date.today() + relativedelta(years=-18))
etaW = FloatText(description='Età')


ui = HBox([ddecW,dobW])


def f(end,start):
    val = round((end - start).days/365.25,1)
    print(f'Delta is {val}')

out = interactive_output(f,{'end': ddecW,'start': dobW,})

display(ui,out)