问题描述
当我使用 Firefox 并单击日期选择器旁边的 x 时,我收到以下错误消息:
Chrome 不会发生这种情况,通过阅读 Web 官方网页,它应该也适用于 Firefox,您能帮忙吗?
这里是代码:
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)
解决方法
该函数正在尝试计算 date
和 None
之间的差异,因此出现错误消息。在这种情况下,您的输出小部件应该显示什么? 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)