使用 ipywidgets 切换所有复选框?
Toggle all checkboxes with ipywidgets?
我正在使用 ipywidgets 的复选框以交互方式 select 要绘制的数据。
似乎没有开箱即用的“全部切换”功能。
所以我像这样实现了自己的“全部切换”:
import ipywidgets as widgets
def toggle_all(change):
for cb in checkboxes[1:]:
cb.value = checkboxes[0].value
def interactive_plot(change):
selection = {}
for cb in checkboxes[1:]:
selection[cb.description] = cb.value
#call some plot_function(data = data, selection = selection)
checkboxes = [widgets.Checkbox(value=False, description = "All"), widgets.Checkbox(value=False, description = "Box 1"), widgets.Checkbox(value=False, description = "Box 2")]
box = widgets.VBox(children = checkboxes)
checkboxes[0].observe(toggle_all)
for cb in checkboxes[1:]:
cb.observe(interactive_plot)
display(box)
然而,当复选框被一个接一个地勾选时,这会导致闪烁,当复选框的数量很少时,这种情况几乎不会引起注意,但当列表增长时,就会变得缓慢而烦人。
有更好的方法吗?
Is there a better way to do this?
目前没有。这是一个悲伤的消息,但最大的好处是你找到了最好的方法:)
或者,您可以尝试使用 selectMultiple
小部件 (https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html#SelectMultiple),但不会给您复选框。
ipywidgets 上还有一个老问题,讨论添加可以解决您问题的小部件类型:https://github.com/jupyter-widgets/ipywidgets/issues/893。但看起来它需要一个冠军才能真正实施它。
我正在使用 ipywidgets 的复选框以交互方式 select 要绘制的数据。
似乎没有开箱即用的“全部切换”功能。
所以我像这样实现了自己的“全部切换”:
import ipywidgets as widgets
def toggle_all(change):
for cb in checkboxes[1:]:
cb.value = checkboxes[0].value
def interactive_plot(change):
selection = {}
for cb in checkboxes[1:]:
selection[cb.description] = cb.value
#call some plot_function(data = data, selection = selection)
checkboxes = [widgets.Checkbox(value=False, description = "All"), widgets.Checkbox(value=False, description = "Box 1"), widgets.Checkbox(value=False, description = "Box 2")]
box = widgets.VBox(children = checkboxes)
checkboxes[0].observe(toggle_all)
for cb in checkboxes[1:]:
cb.observe(interactive_plot)
display(box)
然而,当复选框被一个接一个地勾选时,这会导致闪烁,当复选框的数量很少时,这种情况几乎不会引起注意,但当列表增长时,就会变得缓慢而烦人。
有更好的方法吗?
Is there a better way to do this?
目前没有。这是一个悲伤的消息,但最大的好处是你找到了最好的方法:)
或者,您可以尝试使用 selectMultiple
小部件 (https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html#SelectMultiple),但不会给您复选框。
ipywidgets 上还有一个老问题,讨论添加可以解决您问题的小部件类型:https://github.com/jupyter-widgets/ipywidgets/issues/893。但看起来它需要一个冠军才能真正实施它。