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