【问题标题】:Generic class for jupyter widgetsjupyter 小部件的通用类
【发布时间】:2018-12-17 15:42:31
【问题描述】:

我正在尝试创建一个类,以便为我的笔记本中的仪表板轻松创建和生成 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))

【问题讨论】:

    标签: python jupyter-notebook ipywidgets


    【解决方案1】:

    我为此设计了一个简单的类,您需要将字典列表传递给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}]
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多