Я хочу вызвать функцию в интерактивном режиме, используя ipywidgets
с динамическим количеством ползунков.
Я умею отображать.
n_alphas = 3
alphas = [
widgets.FloatSlider(min=-1, max=1, step=1e-3, description=f'$z_{i}$', orientation='vertical')
for i in range(n_alphas)
]
ui = widgets.HBox(alphas)
display(ui)
Это правильно отображает три вертикальных ползунка, как определено n_alphas
.
К сожалению, я не могу привязать этот пользовательский интерфейс с динамическим количеством ползунков к какой-либо функции. Я пробовал следующие варианты, но ничего не получилось:
out = widgets.interactive_output(print_alphas, alphas)
display(ui, out)
Что нужно для привязки списка ползунков, определенных alphas
, к функции print_alphas
и как должна быть определена сама эта функция?
Я бы предложил отдельно мониторинг ползунки для доступа ко всем альфа-каналам из этой функции монитора:
# monitor function, reporting both the changed value and all other values
def handle_slider_change(change):
values = [alpha.value for alpha in alphas]
caption.value = (
f'The slider {change.owner.description} has a value of {change.new}. '
f'The values of all sliders are {values}'
)
# create sliders
n_alphas = 3
alphas = [
widgets.FloatSlider(min=-1, max=1, step=1e-3, description=f'$z_{i}$', orientation='vertical')
for i in range(n_alphas)
]
# register slides
for widget in alphas:
widget.observe(handle_slider_change, names='value')
# display ui
ui = widgets.HBox(alphas)
caption = widgets.Label(value='No change was made yet.')
display(caption, ui)
Спасибо, работает как задумано. Для всех, кто интересуется, как интегрировать это с интерактивным графиком
matplotlib
, есть%matplotlib widget
, и большинство типов графиков поддерживают такие функции, какset_data
, которые позволяют быстро обновлять ранее установленные графики.