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)