首页 > 解决方案 > 更新面板没有效果

问题描述

我想更新一个面板,但它没有效果。另一方面,更新列和更新文本工作正常。panel.update坏了吗?

在我的应用程序中,该选项卡包含几个图。其中一个图需要定期替换为新图(我不能简单地更新列数据)。

最小的工作示例


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)

标签: pythonbokeh

解决方案


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))

推荐阅读