Общий класс для виджетов Jupyter - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать класс, чтобы легко создавать и генерировать Jupyter-виджеты для информационных панелей в моих записных книжках.Этот класс до сих пор имеет add_row и метод отображения.У меня возникают проблемы с поиском способа простой передачи параметров объекту виджета, поскольку разные виджеты требуют разных вещей (вместо использования 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 голосов
/ 10 января 2019

Я разработал для этого простой класс, вам нужно передать список словарей в метод add_rows, где у каждого дикта есть виджет class, который вы хотите создать, плюс любые дополнительные kwargs, которыевам нужно создать виджет.Это должно работать для любого типа виджета, если вы предоставите правильные kwargs.

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}]
)
...