#python #bokeh
#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
не работает
Ответ №1:
Обновления 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))
Комментарии:
1. «необходимость» относительна. Я могу легко обойти это, просто интересно, не упускаю ли я чего-то, поскольку на панели есть метод обновления.