python - ipywidgets 小部件值没有改变

标签 python jupyter-notebook ipywidgets azure-notebooks

我正在尝试从在 Python 3.6 中运行 Jupyter Notebooks 的 Microsoft Azure Notebooks 中的 ipywidgets 小部件获取输出。但是,当我得到它们时,它不会返回新值。这也适用于永远不会为其他小部件调用的事件处理程序/交互。

我尝试使用不同类型的小部件(TextTextareaCheckboxButton切换按钮)。我已尝试获取 w.valueipywidgets.interactw.observew.on_click按钮。

我做的一个测试:

import time
import ipywidgets as widgets
from IPython.display import display

w = widgets.Text(disabled=False)
display(w)

while True:
    print(w.value)
    time.sleep(1)

我希望当我在 Text 字段中输入内容时,它会输出该文本,但它会继续打印它开始的内容。没有错误。因此,对于上面的示例,无论我在结果文本字段中输入什么,打印的都是空行。

最佳答案

问题是小部件和 Python 之间的通信 内核是异步的且令人困惑。

单元格中的

time.sleep(...) 只会阻止 Python 解释器并执行 不允许小部件 Javascript 实现将更改的值发送到 Python 内核(因为 Python 内核被阻塞了,没有做任何事情)。

如果您创建小部件然后修改小部件文本条目然后评估 w.value下一个单元格中,您将以交互方式看到更改后的值。

enter image description here

请参阅此处的进一步讨论(查找“异步”):

https://github.com/AaronWatters/jp_proxy_widget/blob/master/notebooks/Tutorial.ipynb

一般来说,如果你想强制 Python 解释器查看从 Javascript 小部件实现发送的某些值,Javascript 端必须以某种方式回调 Python 解释器,并且 Python 解释器不能被 sleep 或任何其他此类机制阻塞.

关于python - ipywidgets 小部件值没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56403663/

相关文章:

python - Pandas `transform(set)` 引发异常

python - 如何在单个 PyQt GUI 实例中多处理多个绘图

python - 替代 set_level_values

python-3.x - 如何将 Python 中的代码和 Markdown 单元格导入 Jupyter Notebook?

python - 带有 matplotlib 图的 ipywidget 总是显示两个轴

python - 在 TensorFlow 中使用验证集和不使用验证集来拟合 DNN 之间的区别

python - 在全息 View 中自定义工具提示

python - 从 jupyter 服务器下载数据

python - 在 IPython 中创建弹出窗口小部件

python - 如何从 'interact_manual' 更改使用 'ipywidgets' 创建的按钮标签?以及如何更改该按钮的大小和颜色?