Python:如何在Bokeh select小部件中动态更改选项?

Python:如何在Bokeh select小部件中动态更改选项?,python,bokeh,Python,Bokeh,我有一个包含国家和城市名称的数据框 from bokeh.io import curdoc from bokeh.layouts import row, column, widgetbox,layout from bokeh.models import ColumnDataSource, Select import pandas as pd df = pd.DataFrame() df['City'] = ['None', 'Paris', 'Lione', 'Rome','Milan',

我有一个包含国家和城市名称的数据框

from bokeh.io import curdoc
from bokeh.layouts import row, column, widgetbox,layout

from bokeh.models import ColumnDataSource, Select
import pandas as pd

df = pd.DataFrame()
df['City'] = ['None', 'Paris', 'Lione', 'Rome','Milan', 'Madrid', 'Barcelona' ]
df['Country']   = ['None', 'France', 'France', 'Italy', 'Italy', 'Spain', 'Spain']
我想要两个小部件,一个用于国家,另一个用于城市

select_country = Select(title="Country",  options=list(df['Country']), value = '')
select_city = Select(title = 'City', value = '', options = list(df['City']))
如果我选择了不同的
国家/地区

def update_layout(attr, old, new):
    country_selected = select_country.value
    tmp = df[df['Country']==country_selected]
    select_city = Select(title = 'City', value = '', options = list(tmp['City']))

controls = widgetbox(select_country, select_city)
select_country.on_change('value', update_layout)
select_city.on_change('value', update_layout)
layout = column(row(controls))
curdoc().add_root(layout)

下面是动态更新第二个选择小部件(BokehV1.1.0)中选项的代码


你试过运行这个代码吗?@Tony现在我试过了,但它似乎不起作用,即它不更新
select\u city
from bokeh.io import curdoc
from bokeh.models import Select, Column
import pandas as pd

df = pd.DataFrame()
df['France'] = ['Paris', 'Lione', 'Marseille']
df['Italy'] = ['Rome','Milan', 'Rimini']
df['Spain'] = ['Madrid', 'Barcelona', 'Bilbao']
df['Country']   = ['France', 'Italy', 'Spain']

select_country = Select(title="Country",  options=list(df['Country']), value = 'France')
select_city = Select(title = 'Cities', value = 'Paris', options = list(df['France']))

def update_layout(attr, old, new):
    country_selected = select_country.value
    select_city.options = list(df[country_selected].values)

select_country.on_change('value', update_layout)
select_city.on_change('value', update_layout)
layout = Column(select_country, select_city)
curdoc().add_root(layout)