[英]How to update a source in a JavaScript Callback of Bokeh in Python?
[英]Python Bokeh: How to update a Toggle button - defined in the main - in a subroutine
我有以下簡單的bokeh示例。 啟動按鈕在子例程中啟動一個不定式的while循環,一旦按下按鈕3或取消選中該復選框,該循環應立即停止運行。 Button2會檢查狀態,而無需循環,這會正常工作。 由於button3和復選框cb在主目錄中定義,因此button1調用的子例程無法識別更改。 有辦法解決嗎?
我使用了bokeh版本1.0.1。 您可以使用bokeh serve script.py
完整地運行該示例,然后在瀏覽器( http:// localhost:5006 )中進行查看。
from bokeh.models import Column
from bokeh.plotting import curdoc
from bokeh.models.widgets import Button, Toggle, CheckboxGroup
import time
def start_loop():
while (not button3.active) and (len(cb.active)):
time.sleep(1)
print(button3.active)
print(cb.active)
def check_status():
print(button3.active)
print(cb.active)
button1 = Button(label = "start")
button1.on_click(start_loop)
button2 = Button(label = "check status")
button2.on_click(check_status)
button3 = Toggle(label="stop")
cb = CheckboxGroup(labels=['stop'],active=[0])
curdoc().add_root(Column(button1,button2,button3,cb))
我認為while循環會干擾Tornado IO_loop。 我建議您改用add_periodic_callback
(Bokeh v1.1.0)
from bokeh.models import Column
from bokeh.plotting import curdoc
from bokeh.models.widgets import Button, Toggle, CheckboxGroup
import time
# def start_loop():
# while (not button3.active) and (len(cb.active)):
# time.sleep(1)
# print(button3.active)
# print(cb.active)
def check_status():
print(button3.active)
print(cb.active)
# button1 = Button(label = "start")
# button1.on_click(start_loop)
button2 = Button(label = "check status")
button2.on_click(check_status)
button3 = Toggle(label = "stop")
cb = CheckboxGroup(labels = ['stop'], active = [0])
curdoc().add_root(Column(button2, button3, cb))
curdoc().add_periodic_callback(check_status, 1000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.