"busy"/"done" -Ereignisse (zum Aktivieren von Triggern oder anderen UI-Ereignissen) sind für eine der nächsten beiden Versionen geplant. (Ich hoffe, dass sie es in 0.12.6
machen, aber wenn nicht, werden sie in 0.12.7
sein.)
In der Zwischenzeit, die beste Wahl ist, etwas „Dummy“ Modell zu verwenden, um einen CustomJS
Rückruf auszulösen. Zum Beispiel könnten Sie eine unsichtbare Glyphe hinzufügen und eine CustomJS
beliebige Eigenschaft als Proxy für ein "busy" -Ereignis auslösen. Dies ist klobig, aber brauchbar.
Hier ist ein sehr grobes Umrissbeispiel. Die erste Warnung wird sofort angezeigt. Schließen Sie es, der nächste Alarm erscheint 5 Sekunden später.
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))
Ich bin mir nicht sicher, wie man ein Ereignis (d. H. Knopfklick) sowohl mit meinem Python-Callback als auch mit einer Eigenschaftsänderung an der "Dummy" -Modellinstanz verbindet? Wenn der Python-Callback die Eigenschaft ändert, wird die Client-Seite diese Änderung erst sehen, wenn der Callback abgeschlossen ist (was gut wäre, um mein Spinner anzuhalten). Aber ich bin mir nicht sicher, wie das Startereignis gehandhabt werden soll. – tbc
"Wenn der Python-Callback die Eigenschaft ändert, wird die Clientseite diese Änderung erst sehen, wenn der Rückruf abgeschlossen ist." Das stimmt nicht, siehe Beispielcode in der aktualisierten Antwort. – bigreddot
Perfekt - ich werde das versuchen. Vielen Dank!!! – tbc