I’m getting ready to create a communications widget for use in a Jupyter application. I’m trying to understand when the widget’s “value” property can be accessed … it looks like the “value” can be read anytime, but won’t match the widget model “value” until cell execution stops (i.e., the widget’s browser state isn’t updated back to the widget’s kernel state).
To test this, I tried creating a small slider widget, waiting for 10 seconds, and then reading the widget “value” property … all in the same cell. In the 10 seconds, the user (i.e., me) has time to change the slider to something like “5”.
Here’s a small test that can be run in a cell. When the sleep() happens, I move the slider to value “5”.
from ipywidgets import * import time slider = IntSlider( value=7, min=1, max=10.0, step=1, description="Input:", ) display(slider) time.sleep(10) # move slider to 5 print("done " + str(slider.value))
I expected “done 5” but got “done 7”, implying to me that “value” is updated only after the cell completes.
Is this always true? And is there a way to force synchronization between the widget’s browser state and its state in the kernel?
(I do get the expected “done 5” if I move the print() to the following cell.)