为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2023-01-04 11:25:36
我目前正在创建一个在服务器上运行的基于 Python- Bokeh的 webapp 应用程序。在此应用程序中,用户可以预览来自 pandas 数据框的数据(使用 BOKEH DATATABLE 显示)并可以根据业务需要修改数据。刷新数据框后,用户需要通过单击 BOKEH BUTTON 小部件将数据框导出到他的本地系统(csv 格式) 。现在我能够创建 webapp 应用程序,但是在将数据导出到本地系统时它会导致问题。当我单击按钮进行下载时,将下载一个 csv 文件,其中包含数据框中的初始默认数据。在那之后,即使我更新了数据框并再次单击“下载”按钮,也会下载相同的旧默认数据而不是更新的数据框。下面是我最后尝试的代码。请建议,需要对以下代码段进行哪些更改,以便每次刷新数据并单击下载按钮时,它都会导出数据表中显示的最新数据。from bokeh.io import curdocfrom bokeh.models import ColumnDataSource, CustomJSfrom bokeh.models.widgets import DataTable, NumberFormatter, TableColumn, Buttonfrom bokeh.layouts import column,rowimport pandas as pdimport numpy as np# Create Default datadata = {'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 columnsdata_table1 = DataTable(columns=Columns_tab1, source=source_new,height = 200) # Javascript for exporting datajs_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 IEif (navigator.msSaveBlob) {navigator.msSaveBlob(blob, filename);}
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

这是一个错误。我刚刚创建了https://github.com/bokeh/bokeh/issues/10146

作为解决方法,更换

Exportbutton.js_on_click(CustomJS(args=dict(source=ColumnDataSource(df)),code = js_code  ))

Exportbutton.js_event_callbacks['button_click'] = [CustomJS(args=dict(source=ColumnDataSource(df)), code=js_code)]



查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号