python - 更新面板没有效果
问题描述
我想更新一个面板,但它没有效果。另一方面,更新列和更新文本工作正常。panel.update
坏了吗?
在我的应用程序中,该选项卡包含几个图。其中一个图需要定期替换为新图(我不能简单地更新列数据)。
bokeh==2.2.1
最小的工作示例:
from bokeh.plotting import curdoc
from bokeh.models import Tabs, Paragraph, Panel
from bokeh.layouts import column
COUNTER = 0
PAR = Paragraph(text='initial paragraph')
COLUMN = column(children=[PAR])
PANEL = Panel(child=COLUMN, title='response time')
def update_column():
global COUNTER, COLUMN
par = Paragraph(text=f'counter = {COUNTER}')
COLUMN.update(children=[par])
COUNTER += 1
print("update column done")
def update_panel():
global COUNTER, PANEL
par = Paragraph(text=f'counter = {COUNTER}')
PANEL.update(child=column(children=[par]))
COUNTER += 1
print("update panel done")
def update_text():
global COUNTER, PAR
PAR.update(text=f'counter = {COUNTER}')
COUNTER += 1
print("update text done")
doc = curdoc()
panels = []
tabs = Tabs(tabs=[PANEL])
doc.add_periodic_callback(callback=update_panel, period_milliseconds=1000)
doc.add_root(tabs)
callback=update_column
作品callback=update_text
作品callback=update_panel
不工作
解决方案
对Panel
属性的更新根本没有连线。如果您需要该功能,请在 GitHub 上创建问题。
作为一种解决方法,您可以将child
面板的 包装在一列中,然后更新该children
列的属性:
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import Tabs, Panel, Div, Button
p = Panel(title='Panel', child=column(Div(text='Panel content')))
ts = Tabs(tabs=[p])
b = Button(label='Update panel content')
def update_panel():
p.child.children = [Div(text='Updated panel content')]
b.on_click(update_panel)
curdoc().add_root(column(ts, b))
推荐阅读
- apache-spark - 基于另一列 pyspark 舍入到精度值
- angular - 如何正确地将数组与来自 ngFor 循环的 ngModel 以角度方式绑定?
- sqlite - Haskell、Sqlite、池和仆人
- javascript - Geopackage 未在传单中呈现
- java - Jsoup - 从元素中删除所有子元素
- python - 如何将字符串百分比转换为浮点小数?
- python - 使用 Arcpy 在文件夹中获取质心几何的最小纬度
- xampp - Xampp 将我发送到仪表板而不是站点
- javascript - 在 Vue V2 中,如何合并两个对象数组并将它们保存到本地存储?
- css - 如何仅在需要时显示自定义滚动条