Jupyter小部件的泛型类

时间:2018-12-17 15:42:32

标签: python jupyter-notebook ipywidgets

我正在尝试创建一个类,以便为笔记本中的仪表板轻松创建和生成jupyter小部件。到目前为止,该类具有add_row和display方法。我很难找到一种轻松地将参数传递给小部件对象的方法,因为不同的小部件需要不同的东西(而不是为每个小部件使用100 if语句)。目前,它对于TextBox可以正常工作,但我想对其进行扩展以使其与所有小部件一起使用。

以下是add_row方法的示例:

# types: Type of widgets ex: ['Text', 'Text', 'Text']
# labels: Label names ['A', 'B', 'C']
# values: Default values ['', '', '']

for i in range(len(labels)):
    w = getattr(widgets, types[i])

    row.append(w(description=labels[i], value=values[i]))

self.rows.append(widgets.HBox(row))

1 个答案:

答案 0 :(得分:0)

为此,我已经编写了一个简单的类,您需要将字典列表传递给add_rows方法,其中每个字典都有您要创建的小部件class,以及所有其他内容kwargs,您需要创建小部件。只要您提供正确的kwarg,它就适用于任何窗口小部件类型。

import ipywidgets as ipyw

class WidgetAppender:

    def __init__(self):
        self.box = ipyw.VBox()
        display(self.box)

    def add_rows(self, list_of_dicts):
        for input_dict in list_of_dicts:
            widget_class = input_dict.pop('class')
            widget = widget_class(**input_dict)
            self.box.children = self.box.children + (widget,)

wa = WidgetAppender()
display(wa)

wa.add_rows(
[{'class': ipyw.Text, 'description':'Hi'},
 {'class': ipyw.Checkbox, 'value': False}]
)