Jupyter笔记本上的多个相关小部件(下拉菜单)

时间:2018-01-23 16:57:01

标签: python python-3.x drop-down-menu widget jupyter-notebook

我正在关注如何在这里处理jupyter笔记本上的多个依赖小部件的示例:

Dynamically changing dropdowns in IPython notebook widgets and Spyre

在该示例中,代码解决方案如下:

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.Dropdown(options=geo.keys())
init = scW.value
cityW = widgets.Dropdown(options=geo[init])
j = widgets.interactive(print_city, city=cityW)
i = widgets.interactive(select_city, country=scW)
display(i)
display(j)

所以,第二个下拉列表取决于第一个下拉列表的值。 这里的问题是:如果我想创建第三个下拉列表取决于第二个下拉列表的价值该怎么办?让我们说上面的每个城市(CHI,NYC,MOW, LED)有一些区域,我想第三次下拉,每次更新城市时都会改变。

希望问题很清楚,谢谢!

2 个答案:

答案 0 :(得分:0)

以防万一您从未找到解决方案:这里有一个可以在python 3中运行的解决方案。我已经注释了我对原始代码所做的更改。希望对您有所帮助!

from IPython.html import widgets
from IPython.display import display

geo={'USA':['CHI','NYC'],'Russia':['MOW','LED']}

geo2={'CHI':['1','2'],'NYC':['3','4'],'MOW':['5','6'],'LED':['7','8']} #create dictionary with city districts

def print_city(city,district):
    print(city)
    print(district) #add in command to print district

def select_city(country):
    cityW.options = geo[country]

#add in 'select district' function that looks in the new dictionary
def select_district(city):
    districtW.options = geo2[city]

scW = widgets.Dropdown(options=geo.keys())
init = scW.value
cityW = widgets.Dropdown(options=geo[init])


init2= cityW.value #new start value for district dropdown
districtW = widgets.Dropdown(options=geo2[init2]) #define district dropdown widget

j = widgets.interactive(print_city, city=cityW, district=districtW) #define district value
i = widgets.interactive(select_city, country=scW)

k = widgets.interactive(select_district, city=cityW) #call everything together with new interactive

display(i)
display(j)

答案 1 :(得分:0)

使用print对我来说有点笨拙。我在原始页面here中为两个相关的小部件提供了一个更清晰,更简洁的答案。下面,我为多个依赖小部件提供答案。

awk

一种替代方法是使用如下所示的显式更新功能。请记住,更新速度可能不会那么快。该代码运行良好。

interactive