簡體   English   中英

Python Bokeh:如何在子例程中更新“切換”按鈕-在主菜單中定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM