次の2つのリリースのいずれかで、「ビジー」/「完了」イベント(スピンナーやその他のUIイベントのトリガーを有効にする)が計画されています。 (私は彼らが0.12.6
にそれを作るそうでない場合、彼らは0.12.7
になることを願っています。)
平均時間では、あなたの最善の策はCustomJS
コールバックをトリガするために、いくつかの「ダミー」モデルを使用することです。たとえば、目に見えないグリフを追加し、その上に任意のプロパティーを「ビジー」イベントのプロキシーとしてトリガーしてCustomJS
をトリガーすることができます。これは厄介ですが、保守可能です。
ここでは非常に概略的な例を示します。最初のアラートがすぐにポップアップ表示されます。それを閉じて、5秒後に次のアラートがポップアップします。
import time
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import Button, CustomJS
from bokeh.plotting import figure
p = figure()
p.circle([1,2,3,4,5], [2,6,3,1,6])
dummy = p.circle([1], [2], alpha=0)
dummy.glyph.js_on_change('size', CustomJS(code="""
alert(cb_obj.size.value)
"""))
b = Button()
def cb():
dummy.glyph.size = 10
time.sleep(5)
dummy.glyph.size = 20
b.on_click(cb)
curdoc().add_root(column(b, p))
「ダミー」モデルのインスタンスで、私のpythonコールバックとプロパティの変更の両方にイベント(ボタンクリック)を接続する方法がわかりません。 Pythonのコールバックがプロパティを変更した場合、コールバックが完了するまでクライアント側はその変更を見ません(これは私のスピナーを止めるのに有効です)。しかし、私はどのように開始イベントを処理/キャプチャするか分からない。 – tbc
"pythonコールバックがプロパティを変更した場合、コールバックが完了するまで、クライアント側はその変更を認識しません。「そうではありません。更新された回答のサンプルコードを見てください。 – bigreddot
パーフェクト - 私はそれを試みます。ありがとう!!! – tbc