#jupyter-notebook #datepicker #widget #ipywidgets
Вопрос:
Когда я использую Firefox и нажимаю на значок x рядом с средством выбора даты, я получаю следующее сообщение об ошибке:
Этого не происходит с Chrome, и это должно работать также в 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)
Ответ №1:
Функция пытается вычислить разницу между a date
и a 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)
Комментарии:
1. Здравствуйте, большое вам спасибо, однако, если я нажму на крестик рядом с полем, я все равно получу сообщение об ошибке с помощью Firefox, этого не происходит в Chrome
2. Пожалуйста, опубликуйте сообщение об ошибке и обновите свой код, чтобы точно показать, что выполняется, и полученную ошибку