Bokeh генерирует ошибку PropertyValueList при попытке обновить виджет MultiSelect - PullRequest
0 голосов
/ 17 мая 2018

Я играю с MultiSelect виджетом, и я получил его до такой степени, что он генерирует ошибку, которую я не могу объяснить.

Вот рабочий код без ошибок:

from bokeh.io import curdoc
from bokeh.layouts import column, widgetbox
from bokeh.models import Slider, Select, TextInput, MultiSelect

df = ["apples", "oranges", "grapes"]

def callback(attr, old, new):
    print(df)
    print("{} changed: Old [ {} ] -> New [ {} ]".format(attr, old, new))
#    multiselect1.update(options = [x for x in df if new in x])


multiselect1 = MultiSelect(title = "multiselect1",
                           name = "multiselect1",
                           value = [],
                           options = df)
multiselect1.on_change('value', callback)

curdoc().add_root(widgetbox(multiselect1))

Распечатка - это то, что ожидалось:

['apples', 'oranges', 'grapes']
value changed: Old [ [] ] -> New [ ['oranges'] ]

Так много о рабочей части ...
Для не рабочей части ...Как только комментируется multiselect1.update(options = [x for x in df if new in x]) и новая функция callback:

def callback(attr, old, new):
    print(df)
    print("{} changed: Old [ {} ] -> New [ {} ]".format(attr, old, new))
    multiselect1.update(options = [x for x in df if new in x])

... генерирует ошибку :

['apples', 'oranges', 'grapes']
value changed: Old [ [] ] -> New [ ['oranges'] ]
2018-05-17 13:34:48,755 error handling message Message 'PATCH-DOC' (revision 1): TypeError("'in <string>' requires string as left operand, not PropertyValueList",)

Любая идея, почему эта ошибка генерируется и как ее можно избежать?

1 Ответ

0 голосов
/ 18 мая 2018

Похоже, переменная new является списком, тогда как для понимания списка ниже new должна быть строкой:

[x for x in df if new in x]

Вы можете попробовать индексировать список new, чтобы получитьстроковое значение примерно так:

[x for x in df if new[0] in x]
...