text.on_change 对 Bokeh TextInput 没有响应

Posted

技术标签:

【中文标题】text.on_change 对 Bokeh TextInput 没有响应【英文标题】:text.on_change Not Responsive for Bokeh TextInput 【发布时间】:2019-01-12 09:55:27 【问题描述】:

我是使用 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】:

通过使用show(grid),您正在创建一个独立的 html 文档作为输出。这不可能运行真正的 python 回调,因为浏览器没有能力运行 python 代码。运行真正的回调需要连接到一个持久的 Python 进程。那是散景服务器。只有在散景服务器应用程序中才能使用真正的 Python 回调(即 on_change)(这是散景服务器的目的,成为运行真正的 Python 回调的东西。)参见:

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

还可以在 Juyter 笔记本中嵌入 Bokeh 服务器应用程序,例如,请参见此处:

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

【讨论】:

以上是关于text.on_change 对 Bokeh TextInput 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

在 Flask 中调制 Bokeh 服务器

Brief Summary of Bokeh Effect Rendering

Python交互图表可视化Bokeh:1. 可视交互化原理| 基本设置

如何在 Django 应用程序中嵌入 Bokeh 服务器

Bokeh数据 | 为交互式数据可视化库Bokeh提供数据的N种方式

Django:Bokeh.safely 不是一个函数