jupyter-notebook - iPython / Jupyter 单元格何时可以使用小部件属性?
问题描述
我正准备创建一个用于 Jupyter 应用程序的通信小部件。我试图了解何时可以访问小部件的“值”属性......看起来“值”可以随时读取,但在单元格执行停止之前不会匹配小部件模型“值”(即,小部件的浏览器状态不会更新回小部件的内核状态)。
为了测试这一点,我尝试创建一个小的滑块小部件,等待 10 秒,然后读取小部件的“值”属性……都在同一个单元格中。在 10 秒内,用户(即我)有时间将滑块更改为“5”之类的东西。
这是一个可以在单元格中运行的小测试。当 sleep() 发生时,我将滑块移动到值“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))
我预计“完成 5”,但得到“完成 7”,这意味着“值”仅在单元格完成后更新。
这总是正确的吗?有没有办法在小部件的浏览器状态和它在内核中的状态之间强制同步?
(如果我将 print() 移动到以下单元格,我会得到预期的“完成 5”。)
谢谢!
解决方案
目前基本上没有办法自动强制单元格中运行的代码等待事件或小部件中的更改。诸如此类的事情time.sleep(3)
只会冻结单元格,并且在同一单元格中创建的滑块在睡眠完成之前不会显示。
用户可以在单元格 1 中创建一个滑块,然后在单元格 2 中执行睡眠,然后调整滑块,单元格 2 中的代码可能会在睡眠后看到变化,但在这种情况下,同步是由用户指导的,不是自动的.
您也可以从小部件事件启动 Python 代码,但 Python 代码不会“在单元格中运行”并且“打印”不会进入标准单元格输出区域,但可以通过其他方式捕获输出。
在以下屏幕截图中,我使用“输出”小部件来捕获小部件事件的输出
基本问题是小部件和内核之间的所有通信都是通过单向消息进行的——没有任何类型的“返回值”或“确认”。
有关更多讨论,请参阅https://github.com/AaronWatters/jp_proxy_widget/blob/master/notebooks/Tutorial.ipynb。
推荐阅读
- r - 如何提示用户输入目录以保存下载以在 R Shiny 中使用 ggplot2?
- logstash - 为 Logstash 输出设置仪表板
- security - 我试图在带有规则的 hackthebox 的哈希上使用 hashcat,我每次都得到 Exhausted 的输出
- python - Qbittorrent Api 错误:AttributeError: 'Client' 对象没有属性 'download_from_link'
- html - 我怎样才能垂直对齐我的组件并连续 3 个?
- javascript - 使用 async/await 获取 SyntaxError
- python-3.x - 如何在 scikit 学习模型中使用 Tensorflow 嵌入?
- javascript - 图像数据存储在哪里以及如何访问它
- android - Xamarin.Forms.Device.StartTimer - 用户交互似乎存在“滞后”
- wordpress - 编辑器中的 Wordpress getblocks 返回错误:('core/editor').getBlocks` 已弃用