Python ipywidgets在多个下拉菜单中选择多个
我有两个下拉菜单:1个Num集群和2个集群 Num Clusters是1,2,3,4,5中的一个,而Cluster取决于选择的Num Clusters 我想在群集下拉菜单中选择多个群集。问题是群集下拉菜单不使用Num Cluster下拉选择更新 任何帮助都将不胜感激。提前谢谢Python ipywidgets在多个下拉菜单中选择多个,python,drop-down-menu,ipywidgets,Python,Drop Down Menu,Ipywidgets,我有两个下拉菜单:1个Num集群和2个集群 Num Clusters是1,2,3,4,5中的一个,而Cluster取决于选择的Num Clusters 我想在群集下拉菜单中选择多个群集。问题是群集下拉菜单不使用Num Cluster下拉选择更新 任何帮助都将不胜感激。提前谢谢 import pandas as pd import numpy as np import ipywidgets as widgets dict_cls = {1:np.array([1,1,1,1,1]), 2:np.
import pandas as pd
import numpy as np
import ipywidgets as widgets
dict_cls = {1:np.array([1,1,1,1,1]), 2:np.array([1,2,1,1,1]), 3:np.array([1,2,3,1,1]), 4:np.array([1,2,3,4,1]), 5:np.array([1,2,3,4,5])}
dd_numcls = widgets.Dropdown(
options=sorted(dict_cls.keys()),
value=min(dict_cls.keys()),
description='Num Cluster:')
dd_cls = widgets.SelectMultiple(
options=sorted(np.unique(dict_cls[dd_numcls.value])),
value=(min(sorted(np.unique(dict_cls[dd_numcls.value]))),),
description='Cluster:')
b_update_cls = widgets.Button(
description='Select Cluster')
def change_numcls(b):
tmp_lst = np.unique(dict_cls[dd_numcls.value])
dd_cls.options = sorted(tmp_lst)
dd_cls.value = min(tmp_lst)
dd_numcls.observe(change_numcls)
output_filter = widgets.VBox(
[ widgets.HBox([dd_numcls, dd_cls, b_update_cls]), ] ,
layout=widgets.Layout(width='2100px'))
output_filter
但是,如果我使用下拉列表而不是选择多个,则集群更新不会出现问题:
dd_cls = widgets.Dropdown(
options=sorted(np.unique(dict_cls[dd_numcls.value])),
value=(min(sorted(np.unique(dict_cls[dd_numcls.value]))),),
description='Cluster:')
如果您可以显示收到的错误消息,而不是“它不工作”,这通常是有帮助的 这里的错误消息很有启发性
TraitError: The 'value' trait of a SelectMultiple instance expected a tuple, not the int64 1.
如果将赋值从整数改为元组,我认为这就是您想要的行为
将numpy作为np导入
将IPyWidget作为小部件导入
dict_cls={1:np.array[1,1,1,1],2:np.array[1,2,1,1],3:np.array[1,2,3,1,1],4:np.array[1,2,3,4,1],5:np.array[1,2,3,4,5]}
dd_numcls=widgets.Dropdown
选项=已分类的目录键,
值=mindict_cls.keys,
description='Num Cluster:'
dd_cls=widgets.SelectMultiple
选项=sortednp.uniquedict\u cls[dd\u numcls.value],
value=minsortednp.uniquedict\u cls[dd\u numcls.value],现在是一个元组
description='Cluster:'
b_update_cls=widgets.Button
description='Select Cluster'
def更改\u numclsb:
tmp_lst=np.uniquedict_cls[dd_numcls.value]
dd_cls.options=sortedtmp_lst
dd_cls.value=mintmp_lst,现在是一个元组
dd_numcls.observechange_numcls
输出过滤器=widgets.VBox
[widgets.HBox[dd_numcls,dd_cls,b_update_cls],],
layout=widgets.Layoutwidth='2100px'
输出滤波器
如果您可以显示收到的错误消息,而不是“它不工作”,这通常是有帮助的 这里的错误消息很有启发性
TraitError: The 'value' trait of a SelectMultiple instance expected a tuple, not the int64 1.
如果将赋值从整数改为元组,我认为这就是您想要的行为
将numpy作为np导入
将IPyWidget作为小部件导入
dict_cls={1:np.array[1,1,1,1],2:np.array[1,2,1,1],3:np.array[1,2,3,1,1],4:np.array[1,2,3,4,1],5:np.array[1,2,3,4,5]}
dd_numcls=widgets.Dropdown
选项=已分类的目录键,
值=mindict_cls.keys,
description='Num Cluster:'
dd_cls=widgets.SelectMultiple
选项=sortednp.uniquedict\u cls[dd\u numcls.value],
value=minsortednp.uniquedict\u cls[dd\u numcls.value],现在是一个元组
description='Cluster:'
b_update_cls=widgets.Button
description='Select Cluster'
def更改\u numclsb:
tmp_lst=np.uniquedict_cls[dd_numcls.value]
dd_cls.options=sortedtmp_lst
dd_cls.value=mintmp_lst,现在是一个元组
dd_numcls.observechange_numcls
输出过滤器=widgets.VBox
[widgets.HBox[dd_numcls,dd_cls,b_update_cls],],
layout=widgets.Layoutwidth='2100px'
输出滤波器
问题是value和dd_cls_value不是元组。下面的代码工作得非常好。感谢@ac24
import pandas as pd
import numpy as np
import ipywidgets as widgets
dict_cls = {1:np.array([1,1,1,1,1]), 2:np.array([1,2,1,1,1]), 3:np.array([1,2,3,1,1]), 4:np.array([1,2,3,4,1]), 5:np.array([1,2,3,4,5])}
dd_numcls = widgets.Dropdown(
options=sorted(dict_cls.keys()),
value=min(dict_cls.keys()),
description='Num Cluster:')
dd_cls = widgets.SelectMultiple(
options=sorted(np.unique(dict_cls[dd_numcls.value])),
value=(min(sorted(np.unique(dict_cls[dd_numcls.value]))),), #TUPLE
description='Cluster:')
b_update_cls = widgets.Button(
description='Select Cluster')
def change_numcls(b):
tmp_lst = np.unique(dict_cls[dd_numcls.value])
dd_cls.options = sorted(tmp_lst)
dd_cls.value = (min(tmp_lst),) #TUPLE
dd_numcls.observe(change_numcls)
output_filter = widgets.VBox(
[ widgets.HBox([dd_numcls, dd_cls, b_update_cls]), ] ,
layout=widgets.Layout(width='2100px'))
output_filter
问题是value和dd_cls_value不是元组。下面的代码工作得非常好。感谢@ac24
import pandas as pd
import numpy as np
import ipywidgets as widgets
dict_cls = {1:np.array([1,1,1,1,1]), 2:np.array([1,2,1,1,1]), 3:np.array([1,2,3,1,1]), 4:np.array([1,2,3,4,1]), 5:np.array([1,2,3,4,5])}
dd_numcls = widgets.Dropdown(
options=sorted(dict_cls.keys()),
value=min(dict_cls.keys()),
description='Num Cluster:')
dd_cls = widgets.SelectMultiple(
options=sorted(np.unique(dict_cls[dd_numcls.value])),
value=(min(sorted(np.unique(dict_cls[dd_numcls.value]))),), #TUPLE
description='Cluster:')
b_update_cls = widgets.Button(
description='Select Cluster')
def change_numcls(b):
tmp_lst = np.unique(dict_cls[dd_numcls.value])
dd_cls.options = sorted(tmp_lst)
dd_cls.value = (min(tmp_lst),) #TUPLE
dd_numcls.observe(change_numcls)
output_filter = widgets.VBox(
[ widgets.HBox([dd_numcls, dd_cls, b_update_cls]), ] ,
layout=widgets.Layout(width='2100px'))
output_filter
非常感谢你的回答。我没有错。我的问题是,集群下拉菜单不更新Num集群下拉选择。请检查我的答案中附带的截图。我更新了代码,就像你建议使用tuple一样。我在问题中添加了更多快照。你能核对一下吗?非常感谢你的回答。我没有错。我的问题是,集群下拉菜单不更新Num集群下拉选择。请检查我的答案中附带的截图。我更新了代码,就像你建议使用tuple一样。我在问题中添加了更多快照。你能检查一下吗?