|
from bokeh.io import curdoc |
|
from bokeh.models.widgets import Button, DataTable, TableColumn |
|
from bokeh.layouts import column, widgetbox |
|
from bokeh.models import ColumnDataSource, CustomJS |
|
import pandas as pd |
|
|
|
data_df = pd.DataFrame(dict(A=[0,1,2], B=[3,4,5])) |
|
table_source = ColumnDataSource(data=data_df) |
|
data_table = DataTable(source=table_source, width=200, height=200) |
|
column_list = [TableColumn(field=key, title=key) for key in ['A', 'B']] |
|
data_table.columns = column_list |
|
|
|
button = Button(label = 'Dowload') |
|
dowload_source = ColumnDataSource(data=dict()) |
|
|
|
jscb = CustomJS(args=dict(source=dowload_source), code=''' |
|
var txt = source.data['data'][0]; |
|
if ((txt != "_begin") && (txt != "_end")) { |
|
var filename = 'data.csv'; |
|
var blob = new Blob([txt], { type: 'text/csv;charset=utf-8;' }); |
|
|
|
//addresses IE |
|
if (navigator.msSaveBlob) { |
|
navigator.msSaveBlob(blob, filename); |
|
} |
|
|
|
else { |
|
var link = document.createElement("a"); |
|
link = document.createElement('a') |
|
link.href = URL.createObjectURL(blob); |
|
link.download = filename |
|
link.target = "_blank"; |
|
link.style.visibility = 'hidden'; |
|
link.dispatchEvent(new MouseEvent('click')) |
|
} |
|
} |
|
''') |
|
|
|
dowload_source.js_on_change('data', jscb) |
|
|
|
def send_data(): |
|
dowload_source.data = {'data': ['_begin']} |
|
dowload_source.data = {'data': [data_df.to_csv()]} |
|
dowload_source.data = {'data': ['_end']} |
|
|
|
button.on_click(send_data) |
|
curdoc().add_root(column(data_table, widgetbox(button))) |
|
curdoc().add_root(dowload_source) |