Использовать interactive с несколькими виджетами довольно просто, например:

interactive(foo, w1=widget1, w2=widget2, ...)

Однако я хотел бы разместить эти виджеты особым образом, используя комбинации VBox и HBox. Вопрос в том, как я могу использовать интерактив с коробкой?

Я пробовал несколько способов, таких как интерактивный вызов с виджетами Box, а затем отображение самого окна, но это, похоже, не работает.

8
Eric Thibodeau Laufer 8 Сен 2016 в 21:21

3 ответа

Лучший ответ

Он находится в документации виджетов:

В дополнение к interact IPython предоставляет другую функцию, interactive, которая полезна, когда вы хотите повторно использовать созданные виджеты или получить доступ к данным, привязанным к элементам управления пользовательского интерфейса. [...] В отличие от interact, interactive возвращает экземпляр Widget, а не сразу отображает виджет. Виджет - это Box, который является контейнером для других виджетов.

Итак, здесь у вас уже есть w как контейнер Box, для которого вы можете изменить свойства макета.

w = interactive(foo, w1=widget1, w2=widget2)
3
Ely 9 Сен 2016 в 14:57

Использование interactive_output

Что-то типа:

t1 = Text(value='Hello 1', description='row 1')
t2 = Text(value='Hello 2', description='')
t3 = Text(value='Hello 3', description='')
t4 = Text(value='Hello 4', description='row 2')
t5 = Text(value='Hello 5', description='')
t6 = Text(value='Hello 6', description='')
t7 = Text(value='Hello 7', description='row 3')
t8 = Text(value='Hello 8', description='')
t9 = Text(value='Hello 9', description='')

def foo(p1,p2,p3,p4,p5,p6,p7,p8,p9):
    print(p1,p2,p3,p4,p5,p6,p7,p8,p9)

out = interactive_output(foo, {"p1":t1, "p2":t2, "p3":t3, "p4":t4, "p5":t5, "p6":t6, "p7":t7, "p8":t8, "p9":t9})
hbox1 = HBox([t1, t2, t3])
hbox2 = HBox([t4, t5, t6])
hbox3 = HBox([t7, t8, t9])
ui = VBox([hbox1, hbox2, hbox3])

display(ui, out)
1
mrgloom 28 Фев 2018 в 16:36

Я столкнулся с той же проблемой и понял, что нам нужно использовать interactive_output.

out = interactive_output(foo, {"w1":w1, "w2":w2, "w3":w3, "w4":w4})
vbox1 = VBox([w1, w2])
vbox2 = VBoX([w3, w4])
ui = HBox([vbox1, vbox2])

accordian = Accordian(children=[ui])
accordian.set_title(0, 'Title')

display(accordian, out)
3
Seal 17 Фев 2018 в 20:17