使用小部件 (ipywidgets) 中断 widget1_handler
Interupt widget1_handler using widget2 (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='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 循环。上面的代码不起作用,我似乎无法在其他地方找到类似的 problem/solution 。即使单击 b
,b.value
似乎也没有为 for 循环更新。
有什么我想念的吗?还有另一种解决方法吗?感谢您的帮助!
改编自here。您将需要使用一个线程,以便在一个循环为 运行.
时让其他小部件发生变化
import ipywidgets as widgets
from IPython.display import display
import time
a = widgets.ToggleButton(
value=False,
description='start',
disabled=False,
icon=''
)
b = widgets.ToggleButton(
value=False,
description='stop',
disabled=True,
icon=''
)
def work():
a.disabled = True
b.disabled = False
for i in range(1000000):
time.sleep(1)
if b.value is False:
print(i)
elif b.value is True:
break
def func1(change):
if change['new'] is True:
thread = threading.Thread(target=work)
thread.start()
a.observe(func1, 'value')
display(widgets.VBox([a, b]))
以下代码代表我正在处理的问题:
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 循环。上面的代码不起作用,我似乎无法在其他地方找到类似的 problem/solution 。即使单击 b
,b.value
似乎也没有为 for 循环更新。
有什么我想念的吗?还有另一种解决方法吗?感谢您的帮助!
改编自here。您将需要使用一个线程,以便在一个循环为 运行.
时让其他小部件发生变化import ipywidgets as widgets
from IPython.display import display
import time
a = widgets.ToggleButton(
value=False,
description='start',
disabled=False,
icon=''
)
b = widgets.ToggleButton(
value=False,
description='stop',
disabled=True,
icon=''
)
def work():
a.disabled = True
b.disabled = False
for i in range(1000000):
time.sleep(1)
if b.value is False:
print(i)
elif b.value is True:
break
def func1(change):
if change['new'] is True:
thread = threading.Thread(target=work)
thread.start()
a.observe(func1, 'value')
display(widgets.VBox([a, b]))