I am sorry for probably confusing title but I am not sure how to descibe it better. And that is also why I was not able to do much research prior to asking for help. I am sorry for that as well.
However, here is example app:
from bokeh.plotting import curdoc
from bokeh.models import Button, Div, PreText
from bokeh.layouts import row
def setBusyState(is_busy):
div.style['background-color'] = '#ff0000' if is_busy else '#0000ff'
def buttonClicked(event):
pretext.text += "x"
def textChanged(attr, old, new):
setBusyState(is_busy=True)
for i in range(int(1e8)): pass # this represents some demanding work on server side
setBusyState(is_busy=False)
div = Div(text="div_text", style={'background-color': '#0000ff'})
pretext = PreText(text="x")
button = Button(label="button_text")
button.on_click(buttonClicked)
pretext.on_change('text', textChanged)
layout = row([div, pretext, button])
curdoc().add_root(layout)
The idea is following:
User will trigger some action (click on the button in this example). This action will eventually lead to some work on server side, before the server return some response (in reality it will manipulate ColumnDataSource
and as consequence replot the data).
I would like to inform the user that the server is working and he/she should wait via parameters of (in this case) div
element.
What I would expect is that the elemet changes background color to red immediatelly after the button is pressed and changes back to blue aftre the work is done. What I see is that the element (if ever) changes color for only very brief time interval. I expect it has something to do with how are the events on server side flushed to client side.
Anyway, could you point me to direction how to do those things right? Maybe there is some recommended way / framework how to show user that something is actully happening. BTW, this is actually part of a broader issue, where I would like to inform user not only about things happening on server side, but on client side as well - like that the renderes are being rendered (plot received new data and now are being reploted), that is other thing I am trying to solve.
Note: I understand that background color of that Div
could be set directly by background
property and that changing this attribute may propagate faster than just changing vaue in some dictionary. However I tried this also and the result is the same. I left the code as it is becuase that is how is my app written (and there is a reason to do so).
Thank you.