Перерыв l oop по нажатию кнопки в IPyWidget - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь добавить кнопку отмены в 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 запускается и нажимает Стоп не записывается.

Я изучил Асинхронные виджеты , но я не могу понять, как перевести это на кнопку и как продолжить, пока не будет сигнал, вместо того, чтобы ждать сигнала продолжать.

...