Динамически изменяющиеся выпадающие списки в виджетах IPython для ноутбуков и Spyre
У меня есть раскрывающийся список в IPython-ноутбуке (как часть виджетов HTML) и в приложении Spyre (как элемент dropdown
), скажем, чтобы выбрать континент, и я бы хотел добавить второе раскрывающееся меню, чтобы выбрать страны на континенте. Теперь, очевидно, параметры во втором раскрывающемся списке зависят от значения первого. Я пытаюсь найти удобный способ иметь функцию обратного вызова, которая обновила бы этот элемент пользовательского интерфейса.
Я почти сделал это в ноутбуке IPython, где у меня была одна функция interact
и внутри вызываемой функции я создал бы второй элемент interact
со вторым выпадающим списком. Но всякий раз, когда я меняю первый раскрывающийся список, будет создан новый элемент выпадающего списка, поэтому в каждом изменении вы получите одно раскрывающееся меню. Но я хочу, чтобы только одно выпадающее меню было обновлено, все.
Надеюсь, что проблема ясна. Спасибо.
Ответы
Ответ 1
Используйте interactive
вместо interact
и обновите виджет:
from IPython.html import widgets
from IPython.display import display
geo={'USA':['CHI','NYC'],'Russia':['MOW','LED']}
def print_city(city):
print city
def select_city(country):
cityW.options = geo[country]
scW = widgets.Select(options=geo.keys())
init = scW.value
cityW = widgets.Select(options=geo[init])
j = widgets.interactive(print_city, city=cityW)
i = widgets.interactive(select_city, country=scW)
display(i)
display(j)