I am trying to figure out how to display a user's input with Bokeh. Sample code is below. Any pointers would be greatly appreciated.
Thank you
from bokeh.layouts import widgetbox
from bokeh.models import CustomJS, TextInput, Paragraph
from bokeh.plotting import output_file, show
# SAVE
output_file('Sample_Application.html',mode='inline',root_dir=None)
# PREP DATA
welcome_message = 'You have selected: (none)'
# CALLBACKS
def callback_print(source=None, window=None):
user_input = str(cb_obj.value)
welcome_message = 'You have selected: ' + user_input
source.trigger('change')
# TAKE ONLY OUTPUT
text_banner = Paragraph(text=welcome_message, width=200, height=100)
# USER INTERACTIONS
text_input = TextInput(value="", title="Enter row number:",
callback=CustomJS.from_py_func(callback_print))
# LAYOUT
widg = widgetbox(text_input, text_banner)
show(widg)
Few issues, you need to actually pass in the text banner object into the python callback,and update the text attribute to the new string.
Currently you are passing in "source", which is undefined and trying to trigger a change. Normally you do this when you change the data of a source and update it to display on a table or plot etc...
Included below the necessary fix
from bokeh.layouts import widgetbox
from bokeh.models import CustomJS, TextInput, Paragraph
from bokeh.plotting import output_file, show
# SAVE
output_file('Sample_Application.html',mode='inline',root_dir=None)
# PREP DATA
welcome_message = 'You have selected: (none)'
# TAKE ONLY OUTPUT
text_banner = Paragraph(text=welcome_message, width=200, height=100)
# CALLBACKS
def callback_print(text_banner=text_banner):
user_input = str(cb_obj.value)
welcome_message = 'You have selected: ' + user_input
text_banner.text = welcome_message
# USER INTERACTIONS
text_input = TextInput(value="", title="Enter row number:",
callback=CustomJS.from_py_func(callback_print))
# LAYOUT
widg = widgetbox(text_input, text_banner)
show(widg)