如何将`add_next_tick_callback` 用于面板包裹的散景图?

问题描述

我在笔记本(VS Code)中有一个散景图,我想在更改 $ objdump -S -D flag03 | sed -n "297,298p;299q" 4f0: b8 e4 f0 02 00 mov $0x2f0e4,%eax # <--- hex(3*0xface+122)=0x2f0e4 4f5: c3 retq 时更新它。为了启用从 JS 到 Python 的回调,我将图形包装在面板 x_range 中:

panel

在这个例子中,我没有实际更新图,而是有一个额外的 from bokeh.plotting import figure,curdoc import panel as pn pn.extension(comms='vscode') fig = figure() fig.circle([1,2,3],[4,5,6]) tai = pn.widgets.input.TextAreaInput(sizing_mode='stretch_both') panel = pn.Row(pn.pane.bokeh(fig),tai) def change_callback(attr,old,new): tai.value += f'{fig.x_range.start},{fig.x_range.end}\n' fig.x_range.on_change('start',change_callback) fig.x_range.on_change('end',change_callback) panel 来记录回调事件。这是它的样子:

问题是 TextAreaInput 的每次更改都会导致 四个 事件,并且图形更新可能需要一秒钟。 (两个事件是有意义的,因为我有两个回调,但为什么每个事件都发送两次?)因此我想防止更新执行四次。

查看 bokeh 文档,有一个方法 x_range。这个想法是在事件发生时添加此回调,但如果存在,也删除旧回调。类似的东西

add_next_tick_callback

然后将在 ntc = None def tick_callback(): tai.value += f'{fig.x_range.start},{fig.x_range.end}\n' def change_callback(attr,new): global ntc doc = curdoc() if ntc is not None: doc.remove_next_tick_callback(ntc) ntc = doc.add_next_tick_callback(tick_callback) tai.value += f'{ntc}\n' fig.x_range.on_change('start',change_callback) 中执行图形更新。

这不起作用。 tick_callback 仍然会被调用并创建一系列 change_callback 对象,但 NextTickCallback 永远不会被调用

我认为这可能是因为 tick_callback 没有在 Panel 上下文中返回正确的 bokeh 文档。还有 curdoc(),但它提供与 fig.document 相同的文档。还有 curdoc()一个 pn.state 方法,但没有 add_periodic_callback

如何将 add_next_tick_callback 用于面板包裹的散景图?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)