如何在Jupyter notebook的同一单元格中包含多个交互式小部件

7

我的目标是在Jupyter笔记本中有一个单元格来显示多个交互式小部件。具体来说,我想要四个滑块来裁剪图像,然后另一个独立的滑块来旋转这个裁剪后的图像。当我运行代码时,应该同时显示这两个图形。以下是我的实现。

def image_crop(a,b,c,d):
    img_slic=frame[a:b,c:d]

    plt.figure(figsize=(8,8))    
    plt.imshow(img_slic,cmap='RdBu')

    return a,b,c,d

interactive_plot = interactive(image_crop, a = widgets.IntSlider(min=0,max=2000,step=10,value=500,description='Vertical_Uppper'),
                     b = widgets.IntSlider(min=0,max=2000,step=10,value=500,description='Vertical_Lower'),
                     c = widgets.IntSlider(min=0,max=1000,step=10,value=500,description='Horizontal_Left'),
                     d = widgets.IntSlider(min=0,max=1000,step=10,value=500,description='Horizontal_Right') )
interactive_plot

def image_rot(i):
    img_rot=scipy.ndimage.rotate(frame_slic.T,i)

    plt.figure(figsize=(8,8))
    plt.imshow(img_rot,cmap='RdBu')

    return i

interactive_plot_2 = interactive(image_rot, i = 
widgets.IntSlider(min=-180,max=180,step=1,value=0,description='Rotation'))

我可以把它放在两个单元格中(第一个裁剪,第二个旋转),但不能放在一个单元格中。
1个回答

6
Jupyter只会显示一个小部件,因为它总是只显示单元格中最后一条命令的输出。因此,您需要将两个小部件放在一个命令中。您可以使用布局(例如Box)来实现这一点,具体方法请参见LayoutBox示例。请注意保留HTML标记。
from ipywidgets import Box

items = [interactive_plot, interactive_plot_2]
box = Box(children=items)

box # <- this one command displays all children

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接