Pause Jupyter Notebook widgets, waiting for user input(暂停 Jupyter Notebook 小部件,等待用户输入)
本文介绍了暂停 Jupyter Notebook 小部件,等待用户输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
I have the same issue as TheInterestedOne asked here.
I need to create two buttons for the user, and suggest that the user clicks one of the two buttons in the loop; so that the next iteration of the loop occurs only after the user's choice.
I read this source, but I can't make it work for buttons. I don't understand, how the widget attribute changes in the case of using buttons.
from functools import wraps
def yield_for_change(widget, attribute):
def f(iterator):
@wraps(iterator)
def inner():
i = iterator()
def next_i(change):
try:
i.send(change.new)
except StopIteration as e:
widget.unobserve(next_i, attribute)
widget.observe(next_i, attribute) //**button.on_click(on_button_clicked)
may be?**
# start the generator
next(i)
return inner
return f
from ipywidgets import Button
button=Button()
def on_button_clicked():
print("Button clicked.")
@yield_for_change(button, 'value')
def f():
for i in range(10):
print('did work %s'%i)
x = yield
button.on_click(on_button_clicked)
解决方案
This version uses awaitio and is modified for buttons.
from ipywidgets import Button
import asyncio
def wait_for_change(widget):
future = asyncio.Future()
def getvalue(change):
future.set_result(change.description)
widget.on_click(getvalue, remove=True)
# we need to free up the binding to getvalue to avoid an InvalidState error
# buttons don't support unobserve
# so use `remove=True`
widget.on_click(getvalue)
return future
button = Button(description="wow")
list_to_tag = ["one", "two", "three", "four"]
async def f():
for i in list_to_tag:
print("going to tag {}".format(i))
x = await wait_for_change(button)
print("tagged {} with {}".format(i, x))
print()
asyncio.create_task(f())
button
这篇关于暂停 Jupyter Notebook 小部件,等待用户输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:暂停 Jupyter Notebook 小部件,等待用户输入
基础教程推荐
猜你喜欢
- Discord.py 缺少必需的参数 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
