ipywidgets: автоматически обновлять переменную и запускать код после изменения значения виджета. - PullRequest
0 голосов
/ 29 января 2019

Я пытался автоматически обновить переменную и запустить фрагмент кода после изменения ipywidget.

Пока что единственное частичное решение, которое я нашел, - это объявить вид глобальной переменной, следуя примеру наgithub ( здесь ):

import ipywidgets as widgets
from IPython.display import display
x = 5
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
   global x
   x = v['new'] 
slider.observe(on_change, names='value')
display(slider)

В идеале я пытаюсь достичь автоматического изменения значения x после изменения виджета без использования глобальных переменных, а также изменения некоторых ранее определенныхпеременные.Это было бы что-то вроде этого:

x = 5
y = []
slider = widgets.IntSlider()
slider.value = x
def on_change(v):
   x = v['new']
   y.append(x)
slider.observe(on_change, names='value')
display(slider)

1 Ответ

0 голосов
/ 07 февраля 2019

Одним из способов достижения этого было бы создание класса, который принимает новое значение виджета, а также выполняет производные вычисления.Я сделал простое дополнение, но вы можете добавить его в список.

import ipywidgets as widgets

class Updated:

    def __init__(self):
        self.widget_value = None
        self.derived_value = None

    def update(self, val_dict) -> None:
        self.widget_value = val_dict['new']
        self.derived_value = self.widget_value + 10

update_class = Updated()

x = 5
y = []
slider = widgets.IntSlider()
slider.value = x

def on_change(v):
    update_class.update(v)
slider.observe(on_change, names='value')
display(slider)

Затем вы можете увидеть, как update_class.widget_value и update_class.derived_value меняются при перемещении ползунка.

...