Way to notify user with message with delay then disappear - notification, toast etc

Hi,

Looked but don’t find anything relevant. I’d like to notify users of an action “e.g. email sent” then is shown then disappears after n seconds. SOmething like a toast or notification popup.

I’ve looked st.info, st.success etc, however these messages remain until the next render cycle.

Welcome any ideas, thanks!

Hi @LostGoatOnHill , please refer to st.empty() in the Streamlit documentation.

Cheers

Sorry, but I’m unclear how st.empty() helps here, could you elaborate please?

Well @LostGoatOnHill

  1. If you have multiple messages that you need to display from say… within a loop, or a long process, you can define an empty placeholder (eg. mymsg = st.empty() and then later reference that empty placeholder with say… mymsg.info(‘show my message #n’). In this case, the subsequent message will overwrite the previous message in the same place, giving you that intended effect.

  2. Alternatively, if you want something like a toast, you could import another library at the link (streamlit-javascript · PyPI) and pass the an alert JS function with your message, within the st_javascript function. However, this will give you an Ok button to click on, to close your message.

  3. There are other toast libraries (with the timed disappearing messages) on pypi that work with python, but I have not tried them with Streamlit). Hence, I have not recommended them - you’ll need to do some R&D on that.

Hope this helps.

Cheers

There is a win10toast library. Install and use something like

from win10toast import ToastNotifier
toaster = ToastNotifier()
#...
toaster.show_toast("Title", "Comment", duration=5)

If you need to pass some specific action on toast click:

def launch(url):
    os.startfile(url)

toaster.show_toast("Title", "Comment", duration=5, callback_on_click=lambda: launch(url))