Виджет ipywidgets — Выбор даты — проблема с Mozilla Firefox

#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. Пожалуйста, опубликуйте сообщение об ошибке и обновите свой код, чтобы точно показать, что выполняется, и полученную ошибку