Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ipywidgets在多个下拉菜单中选择多个_Python_Drop Down Menu_Ipywidgets - Fatal编程技术网

Python ipywidgets在多个下拉菜单中选择多个

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.

我有两个下拉菜单: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.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一样。我在问题中添加了更多快照。你能检查一下吗?