从循环中获取 IPython 小部件的当前值

Getting the current value of an IPython widget from within a loop

我想在某个循环中获取滑块小部件的值。但是,我希望这些能够实时更新。

例如见下文。在图中的代码中,我初始化了一些滑块,然后 运行 下面的循环。在循环 运行ning 期间,我四处移动滑块。循环中的打印值不会从初始值改变。当我执行最后一个单元格时,会显示更新后的滑块值。

这是一个受异步小部件中最后一个示例启发的解决方案(由@Fabio Perez 建议):

import threading
from IPython.display import display
import ipywidgets as widgets
def f(a, b):
    return

w = interactive(f, a=10, b=20)

def work(w):
    for ii in range(10):
        time.sleep(1)
        print(w.kwargs, w.result)

thread = threading.Thread(target=work, args=(w,))
display(w)
thread.start()

这将启动一个单独的线程来检查小部件的值。