I know this is what the documentation says, but I feel like st.rerun() and escaping the dialog by pressing the top right X or esc don’t have exactly the same behavior. It’s kind of an issue for me since I have a code that is a bit slow at time. On bigger projects, I think you can really feel the difference between “rerun” and “exiting” the dialog.
import time
import streamlit as st
@st.dialog("Example dialog")
def open_dialog():
if st.button("close"):
st.rerun()
def main():
st.header("Minimal example of dialog rerun")
time.sleep(3)
if st.button("open dialog"):
open_dialog()
if __name__ == "__main__":
main()
Here is a minimal example showing the issue. Pressing the cross show no loading at all, while clicking on the close button go through the 3s sleep and prevent the user for performing any action.
edit: This also a problem if you already have a fragment to prevent recomputing something, youy effectively cannot use a dialog in conjunction with another fragment because of the full rerun constraint.
You are right, they are not exactly the same, but they can feel the same as long as the rerun is fast. However,
I have a code that is a bit slow at time.
If you cancel the dialog, nothing has changed. There is nothing new that needs three seconds to be computed. Such a rerun should be fast. If it is not, there must be room for improvement.
Thanks for stopping by! We use cookies to help us understand how you interact with our website.
By clicking “Accept all”, you consent to our use of cookies. For more information, please see our privacy policy.
Cookie settings
Strictly necessary cookies
These cookies are necessary for the website to function and cannot be switched off. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms.
Performance cookies
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us understand how visitors move around the site and which pages are most frequently visited.
Functional cookies
These cookies are used to record your choices and settings, maintain your preferences over time and recognize you when you return to our website. These cookies help us to personalize our content for you and remember your preferences.
Targeting cookies
These cookies may be deployed to our site by our advertising partners to build a profile of your interest and provide you with content that is relevant to you, including showing you relevant ads on other websites.