首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连续的ipywidgets按钮

连续的ipywidgets按钮
EN

Stack Overflow用户
提问于 2020-05-31 17:05:31
回答 2查看 290关注 0票数 3

我正在尝试使用ipywidgets按钮实现一个连续的按钮点击过程。

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

它看起来像是wait变量的引入使得我的purge函数不可用,我不明白为什么。

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-31 17:56:27

您的while wait: pass循环是一个非常紧密的循环,它可能会以100%的速度旋转CPU核心。这不仅会使你的程序陷入困境,甚至可能会使你的整个计算机陷入困境。

我认为您想要做的不是在for循环中显示next按钮,而是在on_click回调中显示。

代码语言:javascript
运行
复制
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来做其他事情。

票数 1
EN

Stack Overflow用户

发布于 2021-11-22 15:58:17

虽然可能不是最干净的,但这是我的解决方案。

按钮和其他ipywidget的属性是可以动态修改的:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62113899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档