我正在尝试使用ipywidgets按钮实现一个连续的按钮点击过程。
单击按钮1应清除按钮1和显示按钮2等。
它看起来像是wait变量的引入使得我的purge函数不可用,我不明白为什么。
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
发布于 2020-05-31 17:56:27
您的while wait: pass
循环是一个非常紧密的循环,它可能会以100%的速度旋转CPU核心。这不仅会使你的程序陷入困境,甚至可能会使你的整个计算机陷入困境。
我认为您想要做的不是在for循环中显示next按钮,而是在on_click
回调中显示。
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
来做其他事情。
发布于 2021-11-22 15:58:17
虽然可能不是最干净的,但这是我的解决方案。
按钮和其他ipywidget的属性是可以动态修改的:
import ipywidgets as widgets
from IPython.display import display
from IPython.display import clear_output
# Create and display button
button = widgets.Button(description="Begin")
output = widgets.Output()
display(button, output)
# Initialize variable
i = 0
def update_button(args):
global i # Declare i as a global variable
with output:
print("Button %s clicked." % i)
# Button attributes' change conditions
if i<2:
button.description = 'Next'
else:
button.description = 'Done'
button.button_style='success'
button.icon='check'
# Do something different on each button press
if i == 0:
# Do stuff
print('Doing stuff')
elif i == 1:
# Do other stuff
print('Doing other stuff')
elif i ==2:
# Do some other stuff
print('Doing some other stuff and finishing')
i=i+1
clear_output(wait=True)
button.on_click(update_button)
https://stackoverflow.com/questions/62113899
复制相似问题