【问题标题】:How do I update ipywidget values while running code?如何在运行代码时更新 ipywidget 值?
【发布时间】:2022-01-21 11:20:47
【问题描述】:

所以我想在 Jupyter notebook 中创建一个简单的 UI:

  1. 计数器“数字”每秒递增一次
  2. 如果选中“暂停”复选框,则“数字”不会增加
  3. 如果按下“触发器”按钮,则“数字”会递减,无论暂停状态如何

到目前为止,我尝试了以下代码的一些变体,但它不起作用;运行 while 循环时,小部件值似乎没有更新。有没有办法解决它或另一种方法来做到这一点?谢谢!

import ipywidgets as widgets
import time
from IPython.display import display, clear_output

btn = widgets.Button(description = "Trigger")
pause = widgets.Checkbox(value = False, description = "Paused?")
number = widgets.Label("0")
wid = widgets.VBox([btn, number, pause])
display(wid)

def triggered(b):
    number.value = str(int(number.value) - 1)

btn.on_click(triggered)

while True:
    time.sleep(1)
    while (pause.value == True):
        time.sleep(3)
    number.value = str(int(number.value) + 1)

【问题讨论】:

标签: python user-interface jupyter-notebook ipywidgets


【解决方案1】:

正如 ac24 所述,诀窍是在不同的线程中运行您的计数器函数。您可以使用threading 库来执行此操作。下面,我定义了一个函数counter 并在不同的线程中启动它。这样,当counter 函数运行时,用户仍然能够与小部件进行交互。 要记住的重要一点是,一旦你启动了你的线程,就没有很多优雅的方法可以杀死它。这意味着最好设置一个total_duration 变量而不是使用while True

见下面的代码:

import ipywidgets as widgets
import time
from IPython.display import display, clear_output
import threading

btn = widgets.Button(description = "Trigger")
pause = widgets.Checkbox(value = False, description = "Paused?")
number = widgets.Label("0")

wid = widgets.VBox([btn,number,pause])
display(wid)

def triggered(b):
    number.value = str(int(number.value) - 1)
    
btn.on_click(triggered)
    
def counter(number,pause,total_duration):
    for t in range(total_duration):
        if not pause.value:
            time.sleep(1)
            number.value = str(int(number.value) + 1)
        elif pause.value:
            time.sleep(3)
            
total_duration=60          
thread = threading.Thread(target=counter, args=(number,pause,total_duration,))
thread.start()

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 2020-04-21
    • 2020-04-03
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多