Python-Bokeh 应用程序:无法通过单击 Bokeh 按钮小部件将更新的数据从 Webapp

我目前正在创建一个在服务器上运行的基于 Python- Bokeh的 webapp 应用程序。在此应用程序中,用户可以预览来自 pandas 数据框的数据(使用 BOKEH DATATABLE 显示)并可以根据业务需要修改数据。刷新数据框后,用户需要通过单击 BOKEH BUTTON 小部件将数据框导出到他的本地系统(csv 格式) 。

现在我能够创建 webapp 应用程序,但是在将数据导出到本地系统时它会导致问题。当我单击按钮进行下载时,将下载一个 csv 文件,其中包含数据框中的初始默认数据。在那之后,即使我更新了数据框并再次单击“下载”按钮,也会下载相同的旧默认数据而不是更新的数据框。

下面是我最后尝试的代码。请建议,需要对以下代码段进行哪些更改,以便每次刷新数据并单击下载按钮时,它都会导出数据表中显示的最新数据。

from bokeh.io import curdoc

from bokeh.models import ColumnDataSource, CustomJS

from bokeh.models.widgets import DataTable, NumberFormatter, TableColumn, Button

from bokeh.layouts import column,row

import pandas as pd

import numpy as np


# Create Default data

data = {'COL_1_DEFAULT': np.random.randint(200, size=100),

        'COL_2_DEFAULT': np.random.randint(200, size=100),

        'COL_3_DEFAULT': np.random.randint(200, size=100),

        'COL_4_DEFAULT': np.random.randint(200, size=100)}


TABLE1_DATA = pd.DataFrame(data)

source_new = ColumnDataSource(TABLE1_DATA)

Columns_tab1 = [TableColumn(field=Ci, title=Ci) for Ci in TABLE1_DATA.columns] # bokeh columns

data_table1 = DataTable(columns=Columns_tab1, source=source_new,height = 200) 


# Javascript for exporting data

js_code="""

var data = source.data;

var columns = Object.keys(source.data);

var filetext = [columns.join(',')].shift().concat('\\n');

var nrows = source.get_length();


for (let i=0; i < nrows; i++) {

        let currRow = [];


        for (let j = 0; j < columns.length; j++) {

            var column = columns[j]

            currRow.push(source.data[column][i].toString())

            }

        currRow = currRow.concat('\\n')

        var joined = currRow.join();

        filetext = filetext.concat(joined);

        }


var filename = 'data_output.csv';

var blob = new Blob([filetext], { type: 'text/csv;charset=utf-8;' });


//addresses IE

if (navigator.msSaveBlob) {

navigator.msSaveBlob(blob, filename);

}



BIG阳
浏览 167回答 1
1回答

慕沐林林

这是一个错误。我刚刚创建了https://github.com/bokeh/bokeh/issues/10146作为解决方法,更换Exportbutton.js_on_click(CustomJS(args=dict(source=ColumnDataSource(df)),code&nbsp;=&nbsp;js_code&nbsp;&nbsp;))和Exportbutton.js_event_callbacks['button_click']&nbsp;=&nbsp;[CustomJS(args=dict(source=ColumnDataSource(df)),&nbsp;code=js_code)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python