Python 使用widget2(ipywidgets)中断widget1_处理程序

Python 使用widget2(ipywidgets)中断widget1_处理程序,python,jupyter-notebook,ipywidgets,Python,Jupyter Notebook,Ipywidgets,以下代码旨在代表我正在处理的问题: import ipywidgets as widgets from IPython.display import display a = widgets.ToggleButton( value=False, description='start', disabled=False, icon='' ) b = widgets.ToggleButton( value=False, description='sto

以下代码旨在代表我正在处理的问题:

import ipywidgets as widgets
from IPython.display import display

a = widgets.ToggleButton(
    value=False,
    description='start',
    disabled=False,
    icon=''
)

b = widgets.ToggleButton(
    value=False,
    description='stop',
    disabled=True,
    icon=''
)

def func1(change):
    if change['new'] is True:
        a.disabled = True
        b.disabled = False
        for i in range(1000000):
            if b.value is False:
                print(i)
            elif b.value is True:
                break

a.observe(func1, 'value')

display(widgets.VBox([a, b]))
我想做的是,通过单击
b
,打破在单击
a
时启动的for循环。上面的代码不起作用,我似乎在别处找不到类似的问题/解决方案。似乎
b。即使单击
b
,for循环的值也不会更新

有什么我遗漏的吗?还有别的办法吗?感谢您的帮助

改编自。您将需要使用一个线程,以便在一个循环运行时更改其他小部件

将IPyWidget作为小部件导入
从IPython.display导入显示
导入时间
a=widgets.ToggleButton(
值=False,
description='start',
禁用=错误,
图标=“”
)
b=widgets.ToggleButton(
值=False,
description='stop',
disabled=真,
图标=“”
)
定义工作():
a、 禁用=真
b、 禁用=错误
对于范围内的i(1000000):
时间。睡眠(1)
如果b.value为False:
印刷品(一)
如果b.value为真:
打破
def func1(更改):
如果更改['new']为真:
线程=线程。线程(目标=工作)
thread.start()
a、 观察(功能1,“值”)
显示(widgets.VBox([a,b]))
改编自。您将需要使用一个线程,以便在一个循环运行时更改其他小部件

将IPyWidget作为小部件导入
从IPython.display导入显示
导入时间
a=widgets.ToggleButton(
值=False,
description='start',
禁用=错误,
图标=“”
)
b=widgets.ToggleButton(
值=False,
description='stop',
disabled=真,
图标=“”
)
定义工作():
a、 禁用=真
b、 禁用=错误
对于范围内的i(1000000):
时间。睡眠(1)
如果b.value为False:
印刷品(一)
如果b.value为真:
打破
def func1(更改):
如果更改['new']为真:
线程=线程。线程(目标=工作)
thread.start()
a、 观察(功能1,“值”)
显示(widgets.VBox([a,b]))