import panel as pn pn.extension() file_download = pn.widgets.FileDownload(file='FileDownload.ipynb', filename='custom_filename.ipynb') file_download pn.widgets.FileDownload(file='FileDownload.ipynb', embed=True) pn.widgets.FileDownload( file='FileDownload.ipynb', button_type='success', auto=False, embed=False, name="Right-click to download using 'Save as' dialog" ) from bokeh.sampledata.autompg import autompg from io import StringIO sio = StringIO() autompg.to_csv(sio) sio.seek(0) pn.widgets.FileDownload(sio, embed=True, filename='autompg.csv') years_options = list(autompg.yr.unique()) years = pn.widgets.MultiChoice( name='Years', options=years_options, value=[years_options[0]], margin=(0, 20, 0, 0) ) mpg = pn.widgets.RangeSlider( name='Mile per Gallon', start=autompg.mpg.min(), end=autompg.mpg.max() ) @pn.depends(years, mpg) def filtered_mpg(yrs, mpg): df = autompg if years.value: df = autompg[autompg.yr.isin(yrs)] return df[(df.mpg >= mpg[0]) & (df.mpg <= mpg[1])] @pn.depends(years, mpg) def filtered_file(yr, mpg): df = filtered_mpg(yr, mpg) sio = StringIO() df.to_csv(sio) sio.seek(0) return sio fd = pn.widgets.FileDownload( callback=filtered_file, filename='filtered_autompg.csv' ) pn.Column(pn.Row(years, mpg), fd, pn.panel(filtered_mpg, width=600), width=600)