我正在尝试使用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
您的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
以执行其他操作。