问题描述
我在笔记本(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 (将#修改为@)