Mehrseitige Streamlit-Apps

Dieses Thema enthält ein Beispiel für eine mehrseitige Streamlit-App. Die folgenden Beispiele zeigen eine mehrseitige Streamlit-App, die die folgenden Dateien enthält:

  • Die Haupt-Streamlit-App (streamlit_main.py): Dies ist die Streamlit-App, die Sie als Wert für die Eigenschaft MAIN_FILE des Befehls CREATE STREAMLIT angeben. Diese Datei wird auch standardmäßig angezeigt, wenn Sie die Streamlit-App in Snowsight aufrufen.

  • data_frame_demo.py: Zeigt einen Datenframe für die Anwendung an.

  • plot_demo.py: Zeigt eine Darstellung der Daten für die Anwendung an.

Informationen zum Arbeiten mit mehreren Dateien in Streamlit in Snowflake finden Sie unter Streamlit-Apps mit Snowsight erstellen und bereitstellen.

Bemerkung

Wenn Sie mehrseitige Anwendungen in Streamlit in Snowflake hosten, wird den Pfadnamen URL das Präfix /! vorangestellt. Wenn zum Beispiel der relative Pfad zu einer Seite in einer mehrseitigen Anwendung /page2 lautet, wird der relative Pfad in Streamlit in Snowflake zu /!/page2, wie in der folgenden URL gezeigt: https://app.snowflake.com/org/account_name/#/streamlit-apps/DB.SCHEMA.APP_NAME/!/page_2

streamlit_main.py

import streamlit as st st.title('Multi-page app demo') st.write('This is the landing page for the app. Click in the left sidebar to open other pages in the app') 
Copy

data_frame_demo.py

import streamlit as st # Write directly to the app st.title("Dataframe Demo App :balloon:") # Get the current credentials session = st.connection('snowflake').session() # Use an interactive slider to get user input hifives_val = st.slider( "Number of high-fives in Q3", min_value=0, max_value=90, value=60, help="Use this to enter the number of high-fives you gave in Q3", ) # Create an example dataframe # Note: this is just some dummy data, but you can easily connect to your Snowflake data # It is also possible to query data using raw SQL using session.sql() e.g. session.sql("select * from table") created_dataframe = session.create_dataframe( [[50, 25, "Q1"], [20, 35, "Q2"], [hifives_val, 30, "Q3"]], schema=["HIGH_FIVES", "FIST_BUMPS", "QUARTER"], ) # Execute the query and convert it into a Pandas dataframe queried_data = created_dataframe.to_pandas() # Create a simple bar chart # See docs.streamlit.io for more types of charts st.subheader("Number of high-fives") st.bar_chart(data=queried_data, x="QUARTER", y="HIGH_FIVES") st.subheader("Underlying data") st.dataframe(queried_data, use_container_width=True) 
Copy

plot_demo.py

import time import numpy as np import streamlit as st from streamlit.hello.utils import show_code def plotting_demo(): progress_bar = st.sidebar.progress(0) status_text = st.sidebar.empty() last_rows = np.random.randn(1, 1) chart = st.line_chart(last_rows) for i in range(1, 101): new_rows = last_rows[-1, :] + np.random.randn(5, 1).cumsum(axis=0) status_text.text("%i%% Complete" % i) chart.add_rows(new_rows) progress_bar.progress(i) last_rows = new_rows time.sleep(0.05) progress_bar.empty() # Streamlit widgets automatically run the script from top to bottom. Because # this button is not connected to any other logic, it just causes a plain # rerun. st.button("Re-run") st.set_page_config(page_title="Plotting Demo", page_icon="📈") st.markdown("# Plotting Demo") st.sidebar.header("Plotting Demo") st.write(  """This demo illustrates a combination of plotting and animation with  Streamlit. We're generating a bunch of random numbers in a loop for around  5 seconds. Enjoy!""" ) plotting_demo() show_code(plotting_demo) 
Copy