0

使用 ipyvuetify/voila,我试图在加载器按钮单击事件处理程序中启动一个长的 I/O 绑定任务(for 循环中的一系列请求),并提供一个取消按钮来中断 for 循环。

不幸的是,取消按钮处理程序没有预期的效果,取消事件只有在加载程序处理程序完成后才会启动。

如何做到这一点?帮助表示赞赏。

这是我的实现:

from time import sleep
import ipyvuetify as v

cancel_flag = False

def long_process(secs):
    print("long process started...")
    for _ in range(secs):  # some long process
        sleep(1)
        if cancel_flag:
            break
    print("long process finished...")
    return 42


def toggleLoading():
    loader_btn.loading = not loader_btn.loading
    loader_btn.disabled = loader_btn.loading


def on_loader_click(*args):
    global cancel_flag
    cancel_flag = False
    toggleLoading()
    result = long_process(secs=5)
    toggleLoading()


def on_cancel_click(*args):
    global cancel_flag
    cancel_flag = True
    if loader_btn.disabled:
        toggleLoading()


loader_btn = v.Btn(loading=False, color="primary", children=["loader"])
loader_btn.on_event("click", on_loader_click)

cancel_btn = v.Btn(loading=False, color="red", children=["cancel"])
cancel_btn.on_event("click", on_cancel_click)

v.Layout(children=[loader_btn, cancel_btn]) 

在此处输入图像描述

4

0 回答 0