Inside a modern ipython/ipykernel, you’ll pretty much always be inside an asyncio-compatible event loop. If you block, though, then things stop flowing.
Output
is kind of an implementation nightmare, with each frontend being slightly different. However, display(..., display_id=True).update
works great.
So:
import ipywidgets as widgets
import asyncio
slider = widgets.IntSlider(
value=5,
min=0,
max=10,
step=1,
description='Test:',
disabled=False,
continuous_update=False,
orientation='horizontal',
readout=True,
readout_format='d'
)
async def test(slider, output):
i = 0
while slider.value != 10:
i = i+1
await asyncio.sleep(0.1)
output.update('test ' + str(slider.value) + ' - ' + str(i))
output = display("tbd", display_id=True)
display(slider)
asyncio.create_task(test(slider, output));
Related: Threading with Matplotlib and ipywidgets - #2 by bollwyvl