2017-01-29 8 views
3

Я хочу отправить дополнительные данные обработчику событий bokeh (например, метод on_change или on_click). Ниже приведен минимальный пример, который увеличивает или уменьшает целое число (я запускаю это приложение с помощью функции «bokeh serve --show app.py»). Мне пришлось писать отдельные обработчики событий, которые в этом примере выполняют почти одинаковые вещи. Чтобы написать это приложение с помощью только одной функции обработчика событий, мне нужно передать дополнительные данные, или обработчик события должен знать вызывающий объект. Как мне это сделать?Python Bokeh отправляет дополнительные параметры обработчику событий виджетов

from bokeh.plotting import curdoc 
from bokeh.models.widgets import Button, Paragraph 
from bokeh.layouts import widgetbox 

minus = Button(label='-') 
plus = Button(label='+') 
text = Paragraph(text='0') 

def minus_callback(): 
    text.text = str(int(text.text) - 1) 

def plus_callback(): 
    text.text = str(int(text.text) + 1) 

minus.on_click(minus_callback) 
plus.on_click(plus_callback) 
# I would prefer to just use one callback and pass additional data to it: 
# minus.on_click(callback, action='decrement') 
# plus.on_click(callback, action='increment') 

layout = widgetbox(minus, plus, text) 
curdoc().add_root(layout) 

ответ

4

Стандарт functools.partial объект, который встроен в питона отлично работает с боке обратных вызовов.

from functools import partial 
from bokeh.plotting import curdoc 
from bokeh.models.widgets import Button, Paragraph 
from bokeh.layouts import widgetbox 

minus = Button(label='-') 
plus = Button(label='+') 
text = Paragraph(text='0') 

def callback(foo): 
    print(foo) 

minus.on_click(partial(callback, foo="minus")) 
plus.on_click(partial(callback, foo="plus")) 

layout = widgetbox(minus, plus, text) 
curdoc().add_root(layout) 
+0

Спасибо за этот ответ - functools парциального также хорошо работает с боком FunctionHandler пройти kwargs при запуске приложения сервера в пределах Jupyter, поэтому функция [это] (https://github.com/bokeh/bokeh/ blob/0.12.5/examples/howto/server_embed/notebook_embed.ipynb), код может иметь переменные, переданные ему ... – b2002

 Смежные вопросы

  • Нет связанных вопросов^_^