gpt4 book ai didi

python - 如何更新从 ipywidget 的回调中调用的 ipywidget?

转载 作者:行者123 更新时间:2023-12-01 06:38:00 29 4
gpt4 key购买 nike

我无法理解 IPython displayupdate 的功能。

看来要更新小部件需要在顶层实例化,并且不能从 ipywidget 的回调中实例化。

这是由 ipywidget Button 调用的 IPython display 的非工作示例:

import functools
import ipywidgets as widgets
from IPython.display import display
import random

def foo(b):
label = display('Initial text', display_id = True)

def on_button_click(b, label):
label.update('New number {}'.format(random.random()))

button = widgets.Button(description="New number")
display(button)
button.on_click(functools.partial(on_button_click, label=label))


button = widgets.Button(description="Button")
button.on_click(foo)
display(button)

Binder

在此示例中,单击按钮会显示文本标签和新按钮(新数字)。但是,单击新号码不会更新文本标签

直接调用foo(0)可以正常工作。单击新号码按钮时,文本标签将更新。

代码示例有问题吗?如果 ipywidget 是通过另一个 widget 的回调实例化的,为什么它无法更新?

最佳答案

我以前见过这个问题,这可能是由于使用 display 时输出的路由位置所致。我可以通过使用上下文管理器输出小部件包装您的函数来获得所需的行为。

对于任何更复杂的事情,我会考虑构建一个从 HBox 派生的类,其中包含一个输出小部件和各种按钮。


import functools
import ipywidgets as widgets
from IPython.display import display
import random

out = widgets.Output()


def foo(b):
with out:
label = display('Initial text', display_id = True)

def on_button_click(b, label):
label.update('New number {}'.format(random.random()))

button = widgets.Button(description="New number")
display(button)
button.on_click(functools.partial(on_button_click, label=label))


button = widgets.Button(description="Button")
button.on_click(foo)
display(button)
display(out)

关于python - 如何更新从 ipywidget 的回调中调用的 ipywidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577302/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com