Я пытаюсь добавить кнопку отмены в IPyWidget, чтобы позволить пользователю отменить длительные вычисления. MWE моего кода выглядит так:
import ipywidgets as widgets
import time
out = widgets.Output()
class my_widget:
def __init__(self):
self.out = widgets.Output()
self.bstart = widgets.Button(description='start')
self.bstart.on_click(self.on_bstart)
self.bstop = widgets.Button(description='stop')
self.bstop.on_click(self.on_bstop)
self.stop = False
def magic_func(self):
for i in range(10):
with out:
print(i)
if self.stop:
break
time.sleep(1)
def on_bstart(self,button):
magic_func()
def on_bstop(self,button):
self.stop = True
def display(self):
display(self.bstart,self.bstop)
w = my_widget()
w.display()
display(out)
Это, очевидно, не работает, потому что как только пользователь нажимает start , magic_func
запускается и нажимает Стоп не записывается.
Я изучил Асинхронные виджеты , но я не могу понять, как перевести это на кнопку и как продолжить, пока не будет сигнал, вместо того, чтобы ждать сигнала продолжать.