Я пытаюсь получить DataTable, который будет выполнять обратный вызов, когда пользователь нажимает на определенную строку. Обратный вызов должен иметь значение первого столбца (для выбранной строки).
Попробовал несколько вещей, но ни одна из них не сработала:
from bokeh.layouts import widgetbox, row, column
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.models.widgets import Button, RadioButtonGroup, RadioGroup, Tabs, \
TextInput, Panel, Div, Select, DataTable, TableColumn, DateFormatter, \
Slider
from bokeh.plotting import curdoc, show
import db_lib # database interaction
import dataAnalyzer
testBox = TextInput(title="test box", value = "start text")
# getting the data here:
data = {}
data["patients"] = {'kyma PT #': [1297, 1301, 1305, 1312], 'client PT #': [15072, 15255, 15228, 15077], 'patient name': ['John', 'David', 'Mark', 'Martin']}
patients_col = [
TableColumn(field="kyma PT #", title="Kyma PT #", width = 50),
TableColumn(field="client PT #", title="Client PT #", width = 50),
TableColumn(field="patient name", title="Patient Name", width = 200),
]
patients_src = ColumnDataSource(data["patients"])
# method 1
source_code = """
row = cb_obj.indices[0]
testBox.update(value=patients_src.data["kyma PT #"][row])
"""
callback = CustomJS(args = dict(source = patients_src), code = source_code)
patients_src.selected.js_on_change('indices', callback)
layout = column(testBox)
show(layout)
Эта ошибка отображает: " Экземпляр Instance не имеет члена js_on_change, он работает без cra sh, но выбор в таблице ничего не делает. Также пробовал:
# method 2
def table_select(attr, old, new):
testBox.update(value=patients_src.data["kyma PT #"][row])
patients_src.selected.on_change('indices', table_select)
То же самое, что и с первой попытки. И:
# method 3
def table_select(attr, old, new):
testBox.update(value=patients_src.data["kyma PT #"][row])
patients_src.on_change('selected', table_select)
Здесь нет ошибки, но обратный вызов не запускается.
Стоит отметить, что я также запускаю его на сервере (curdo c ()), но результат тот же. Есть идеи, что я тут делаю не так?