gpt4 book ai didi

Python:从 ipywidgets.observe() 而不是 3 获取单个信号

转载 作者:行者123 更新时间:2023-12-04 03:42:40 26 4
gpt4 key购买 nike

本质上,我正在使用 ipywidgets 创建一些切换按钮。单击按钮后,我想将一个元素添加到列表中。如果未单击该按钮,则该元素将被删除。 (我还没有开始行动)

对于 Toggle Button,我正在使用 .observe() 并发现每次按下按钮时,都会返回 3 个信号。 {False, True, True} 如果被点击,{True, False, False} 如果没有被点击。我认为每次单击按钮时 .observe() 都会运行 3 次。有什么方法可以只返回一个信号,还是我的代码有错误?

import ipywidgets as widgets
import numpy as np
test = np.array(['test1','test2'])
def buttonArray(button_list):
switch = [widgets.ToggleButton(description = name, value = False) for name in button_list]
combined = widgets.HBox(switch)
display(combined)

def upon_clicked(btn):
signal = btn.owner.value
print(signal)

for n in range(len(button_list)):
switch[n].observe(upon_clicked)

buttonArray(test)

按下按钮时查看输出图像:

enter image description here

最佳答案

如果您在观察到的函数中print(btn),您将看到该函数运行了 3 次。您没有得到包含三个值的数组,它是一个生成单个值并运行三次的函数:

{'name': '_property_lock', 'old': traitlets.Undefined, 'new': {'value': True}, 'owner': ToggleButton(value=False, description='test1'), 'type': 'change'}

{'name': 'value', 'old': False, 'new': True, 'owner': ToggleButton(value=True, description='test1'), 'type': 'change'}

{'name': '_property_lock', 'old': {'value': True}, 'new': {}, 'owner': ToggleButton(value=True, description='test1'), 'type': 'change'}

_property_lock 属性被更改了两次,value 属性在中间更改了一次,因此调用了三个函数。

在大多数情况下,您可能只需要中间集数据。为此,您需要声明传递给观察函数的 name 值,在本例中为 names=['value']:

import ipywidgets as widgets
import numpy as np
test = np.array(['test1','test2'])
def buttonArray(button_list):
switch = [widgets.ToggleButton(description = name, value = False) for name in button_list]
combined = widgets.HBox(switch)
display(combined)

def upon_clicked(btn):
print(btn)
signal = btn.owner.value
# print(signal)

for n in range(len(button_list)):
switch[n].observe(upon_clicked, names=['value']) # CHANGED HERE

buttonArray(test)

关于Python:从 ipywidgets.observe() 而不是 3 获取单个信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65678663/

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