成功的ipywidgets按钮

问题描述 投票:1回答:1

我正在尝试使用ipywidgets按钮进行按钮单击的连续过程。

单击按钮1应该清除按钮1和显示按钮2等...

看起来,等待变量的引入使我的清除函数无法访问,我不明白为什么。

from ipywidgets import Button
from IPython.display import display, clear_output

def purge(sender):
    print('purge')
    clear_output()
    wait=False

for i in range(5):
    print(f'Button number :{i}')
    btn = widgets.Button(description=f'Done', disabled=False,
                        button_style='success', icon='check')
    btn.on_click(purge)
    display(btn)
    wait=True
    while wait:
        pass
python button jupyter-notebook ipywidgets
1个回答
0
投票

您的while wait: pass循环是一个非常紧密的循环,可能会使CPU内核旋转100%。这不仅会使您的程序陷入瘫痪,甚至可能使您的整个计算机陷入瘫痪。

我认为您想做的是在on_click回调中而不是在for循环中显示下一个按钮。

from ipywidgets import Button
from IPython.display import display, clear_output

def purge(i):
    print(f'Button number :{i}')
    clear_output()
    btn = widgets.Button(description=f'Done', disabled=False,
                        button_style='success', icon='check')
    btn.on_click(purge, i + 1)
    display(btn)

purge(1)

然后,当它们到达最后一个按钮时,您可以在函数中加入if i == 5以执行其他操作。

© www.soinside.com 2019 - 2024. All rights reserved.