The official documentation of bokeh 0.12.1 in the link give the below code for creating a dropdown.
http://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html#userguide-interaction-widgets
But it doesn't clearly mention how to capture the value of the dropdown widget when someone click and selects a value from the dropdown.
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
output_file("dropdown.html")
menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)
show(widgetbox(dropdown))
Question
Is see that there are 2 methods called on_click() & on_change() but from the documentation couldn't figure out how to capture the value. How can we assign the selected value to a new variable?
EDIT
Based on input from @Ascurion i have updated my code as shown below. But when i select a value in dropdown nothing is printed in ipython console in Spyder. Please advise.
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
output_file("dropdown.html")
menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)
def function_to_call(attr, old, new):
print dropdown.value
dropdown.on_change('value', function_to_call)
dropdown.on_click(function_to_call)
show(widgetbox(dropdown))
In Bokeh 2.0.0, Dropdown.value
was removed. The correct way to get what item has been clicked is:
from bokeh.models import Dropdown
d = Dropdown(label='Click me', menu=['a', 'b', 'c'])
def handler(event):
print(event.item)
d.on_click(handler)
EDIT This answer does not apply for Bokeh Versions 2.X.X anymore. See comment and the other answer below.
If you set on_change e.g. as follows:
dropdown.on_change('value', function_to_call)
one can access the value of the selected item in function_to_call
as follows:
def function_to_call(attr, old, new):
print dropdown.value
For this to work dropdown has to be defined before function_to_call.
The documentation on how to access values set in widgets with on_click and on_change (bokeh version 12.1) can be found here at the top of the page:
http://docs.bokeh.org/en/latest/docs/user_guide/interaction/widgets.html
EDIT
To get interactive feedback you have to run bokeh in server mode, so that the python code can be evaluated when you interact with a widget. I changed your example slightly to allow to be run with the
bokeh serve --show file_name.py
command. The code below then prints out the selected item in the terminal.
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
from bokeh.plotting import curdoc
menu = [("Quaterly", "time_windows"), ("Half Yearly", "time_windows"), None, ("Yearly", "time_windows")]
dropdown = Dropdown(label="Time Period", button_type="warning", menu=menu)
def function_to_call(attr, old, new):
print dropdown.value
dropdown.on_change('value', function_to_call)
curdoc().add_root(dropdown)
See here for more information:
http://docs.bokeh.org/en/latest/docs/user_guide/server.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With