Как интерактивно обновить контейнер IPywidgets (VBox, HBox)?

Когда я пытаюсь обновить контейнер, который содержит другой динамически созданный контейнер, он не изменяется. Я пробовал разные варианты, но в текущем я определил переменные, содержащие контейнеры, перед функцией обновления и вызываю эту функцию всякий раз, когда происходит изменение:

history_array = []
fig_array = []
history_vbox = widgets.VBox(history_array)
viz_vbox = widgets.VBox(fig_array)
left_box = widgets.HBox([])
gui = widgets.HBox([left_box, viz_vbox])

# updates the gui
def update_gui():
    global gui
    gui = widgets.HBox([left_box, viz_vbox])
    display(gui)

позже в скрипте я изменяю контейнеры глобально, как:

left_box = widgets.VBox([input_box, eq_out0, eqchoice, history_vbox])

Я попытался отобразить контейнеры, прежде чем функция только изменила контейнер без display(), и перепробовал множество других опций, но он по-прежнему показывает только пустой список.

Я положил записную книжку на github. IpySci.ipynb показывает текущее состояние с описанной проблемой IpySci-Copy1.ipynb моя самая ранняя версия, которая показывает, что базовая функция работает так, как задумано.

https://github.com/PMK89/IpySci/

1 ответ

Вы можете изменить содержимое HBox/VBox через егоchildrenимущество, например:

      gui.children = [left_box, viz_vbox]
Другие вопросы по тегам