I want to know if there have 2 or more dataframe in web page, how should I use the clip function for each dataframe?
And the gif picture is through which method to insert into answer region?
Thankyou so much Lots of Love @ash2shukla. Glad it worked for everyone was a long outstanding query.
Is there any long term plan to adapt the streamlit-bokeh-events into streamlit?
Hi @ash2shukla I was trying today in production and got some errors like this
Investigated and it was involved in errors around CORS XSRF.
Can you please help.
I think it will work on localhost else it should be served over https.
Is your streamlit server running over https ?
No its HTTP and Its hosted on Internal VM Server and Other users are given access to it via Port Allowance
When I press Copy It copies on VM’s Clipboard rather than Client Side.
Hi Check this link for clipboard api availability. You cant use clipboard api on non secure origins ( http )
Okay… sounds like a limitation for now. Any other workaround you may suggest?
Hi, @ash2shukla ! It just doesnt work for me, I tried either to replace “button_click” to ButtonClick module as seen in another post or using another browser (tried on chrome and edge).
It’s almost exactly as you exemplified above
copy_button = Button(label="Copy DF") copy_button.js_on_event(ButtonClick, CustomJS(args=dict(df=df_export.to_csv(sep='\t')), code=""" navigator.clipboard.writeText(df); """)) no_event = streamlit_bokeh_events( copy_button, events="GET_TEXT", key="get_text", refresh_on_update=False, override_height=75, debounce_time=0)
The output is nothing, doesnt return any error nor paste the data. Is there something i’m missing?
Hi @betinhosaad , can u see in console whether any error pops up when u click the button ? Try adding a console.log prior to navigator.clipboard thing to see if the js code runs at all or not.
Uncaught (in promise) DOMException: The Clipboard API has been blocked because of a permissions policy applied to the current document.
Trying to find out how to fix this
@ash2shukla is it possible to allow copy paste using bokeh? couldnt find anything helpful
Any news about this topic ? Did you managed to create something ?
Not yet, the work around was to create an export button that generate a csv instead of actually copying the dataframe.
Hope it helps:
csv = df_export.to_csv(index=False)
b64 = base64.b64encode(csv.encode()).decode()
# st.markdown('### **⬇️ Download output CSV File **')
href = f'<a class="streamlit-button small-button"
My objective was to export this clipboard to excel, i didn’t find a easy way to use clipboard, instead i’m downloading df as xlsx and use it to copy for my sheets.
I used Heroku to deploy this app, so using href didn’t work, i think something related to VM used… So i used new function st.download_button and it’s works
I managed that with this:
# Function to convert csv to xlsx @st.cache def to_excel(df): output = BytesIO() writer = pd.ExcelWriter(output, engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1',index=False) writer.save() processed_data = output.getvalue() return processed_data
This function i get from one topic … And to download it…
df= to_excel(df) st.download_button(label="Download",data=df,file_name='df.xlsx')
See if could be useful for you…
How do I identify and throw a message if the data has been copied using this. For example: Once a person click on the button, Can I throw some kind of message saying dataframe as been copied?
This works well for me (on windows):
import pyperclip # Your code ...# pyperclip.copy(my_dataframe.to_csv())
I think pyperclip doesn’t work when the app is run on streamlit. At least, it didn’t work for me! Any solution is appreciated.
I think this will only work if you are running on your local. If you deploy that on a server,
pyperclip will try to use the server process’s clipboard instead of the one the user’s browser is running in. If it works at all, it will be uselessly sitting in a clipboard in a headless process on a server, not your local clipboard.
The current dataframe version supports copy to clipboard of all columns which I believe solves the question of the topic. You can find some information here.