text.on_change не реагирует на Bokeh TextInput

avatar
Allen Wu
5 августа 2018 в 01:08
862
1
1

Я новичок в использовании инструмента Python для рисования боке и виджетов. В моем следующем коде я пытаюсь изменить заголовок графика на значение поля TextInput. Однако, хотя поле появляется при вводе текста и расфокусировке, ничего не меняется. Что может быть причиной этой проблемы и что я могу сделать, чтобы ее исправить?

p=figure(
    height=400,
    x_axis_type='datetime',
    title=(company+' ('+tickerstring+') ')
)


thedates = np.array(stockdates, dtype=np.datetime64)
source = ColumnDataSource(data=dict(
    x=thedates,
    y=stockcloseprices
))


p.line('x', 'y', source=source)

p.grid.grid_line_color="white"
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = 'Price'
p.add_tools(HoverTool(
    tooltips=[
        ("Date", "@x{%F}"),
        ('Close',"@y")
    ],
    formatters={
        'x':'datetime', # use 'datetime' formatter for 'date' field
    },
    mode='vline'
))


def update_title(attrname, old, new):
    p.title = text.value

div = Div(text='<br><b> Key Points </b><br><br>'+percentagechange+'<br><br>'+performance,
width=200, height=100)


text = TextInput(value='Name', title="Enter Ticker Here:")
text.on_change('value', update_title)

grid = gridplot([p, div, text], ncols=2, plot_width=570, plot_height=400)
show(grid)
Источник

Ответы (1)

avatar
bigreddot
5 августа 2018 в 01:45
2

Используя show(grid), вы создаете отдельный HTML-документ в качестве вывода. У этого нет возможности запуска реальных обратных вызовов Python, потому что браузеры не могут запускать код Python. Для запуска реальных обратных вызовов требуется подключение к постоянному процессу Python. Это сервер Боке. Использование реальных обратных вызовов python (т. е. с on_change) возможно только в приложениях сервера боке (это цель сервера боке, быть вещью, которая запускает настоящие обратные вызовы python.) См.:

https://docs.bokeh.org/en/latest/docs/user_guide/server.html

Также можно встроить серверные приложения Bokeh в ноутбуки Juyter, например, см. здесь:

https://github.com/bokeh/bokeh/blob/master/examples/howto/server_embed/notebook_embed.ipynb