ipython小部件在multpile下拉菜单之间进行交互

时间:2018-07-16 14:45:08

标签: python-3.x widget jupyter-notebook

我在一个文件夹中有1,000个文件,我想在IPython中显示一个选定的文件。实际上,我有一个可以完成此任务的交互式下拉菜单:

import ipywidgets as widgets
from ipywidgets import interact, interactive
from IPython.display import SVG
import os
from os import listdir

data = [f[:-4] for f in listdir(os.path.join(os.getcwd(), 'outputs')) if f.endswith('.svg')]
diag_obj = list(set(f.split('_')[0] for f in data))
diag_type = list(set(f.split('_')[1] for f in data))

def display_SVG(SVG_file):
    display(SVG(filename = os.path.join(os.getcwd(), 'outputs', (SVG_file + '.svg'))))   

def choose(dd1, dd2):
    intermediate = dd1.value + '_' + dd2.value + '_'
    res = [f[:-4] for f in listdir(os.path.join(os.getcwd(), 'outputs')) if f.startswith(intermediate)]
    return(res)

dd1 = widgets.Dropdown(
    options = diag_obj,
    description = 'Part: '
)

dd2 = widgets.Dropdown(
    options = diag_type,
    description = 'Type: '
)

dd3 = widgets.Dropdown(
    options = [f[:-4] for f in listdir(os.path.join(os.getcwd(), 'outputs')) if f.startswith(dd1.value + '_' + dd2.value + '_')],
    description = 'File: '
)

display(dd1)
display(dd2)
#display(dd3)

widgets.interact(display_SVG, SVG_file=choose(dd1, dd2)) # actual dropdown
#i = widgets.interactive(display_SVG, SVG_file = dd3)
#display(i)

但是我想做的事情比在下拉列表中列出我的1000个文件更有趣。我的1000个文件具有相同的名称格式:X1_Y1_Name.svg

实际上dd1是一个具有X1的所有唯一值的下拉列表,而dd2是一个具有Y1的所有唯一值的下拉列表。

但是,当我在dd1或dd2中选择新值时,我无法使用dd1和dd2的值来更新上一个下拉列表。我尝试观察并进行互动但没有成功。

0 个答案:

没有答案