Streamlit
1 Introduction to Streamlit
1.1 What is Streamlit?
1.2 Why use Streamlit?
1.3 Setting up the environment
1.4 Creating your first Streamlit app
2 Basic Components
2.1 Text elements
2.1 1 Displaying text
2.1 2 Formatting text
2.2 Data display elements
2.2 1 Displaying data frames
2.2 2 Displaying tables
2.3 Input widgets
2.3 1 Text input
2.3 2 Number input
2.3 3 Date input
2.3 4 Dropdown selection
2.3 5 Slider
2.3 6 Checkbox
2.3 7 Radio buttons
2.3 8 Buttons
3 Advanced Components
3.1 Interactive widgets
3.1 1 Multiselect
3.1 2 File uploader
3.1 3 Color picker
3.2 Media elements
3.2 1 Displaying images
3.2 2 Displaying videos
3.2 3 Displaying audio
3.3 Chart elements
3.3 1 Line chart
3.3 2 Bar chart
3.3 3 Area chart
3.3 4 Scatter chart
3.3 5 Map chart
4 Layout and Styling
4.1 Layout components
4.1 1 Columns
4.1 2 Tabs
4.1 3 Expander
4.2 Styling elements
4.2 1 Custom CSS
4.2 2 Theming
4.2 3 Adding custom fonts
5 State Management
5.1 Session state
5.1 1 Managing state across reruns
5.1 2 Persisting state
5.2 Caching
5.2 1 Caching functions
5.2 2 Caching data
6 Deployment
6.1 Deploying to Streamlit Sharing
6.1 1 Setting up Streamlit Sharing
6.1 2 Deploying your app
6.2 Deploying to other platforms
6.2 1 Deploying to Heroku
6.2 2 Deploying to AWS
6.2 3 Deploying to Google Cloud
7 Best Practices
7.1 Writing clean and maintainable code
7.2 Optimizing performance
7.3 Handling errors and exceptions
7.4 Version control with Git
8 Advanced Topics
8.1 Integrating with other libraries
8.1 1 Integrating with Pandas
8.1 2 Integrating with Plotly
8.1 3 Integrating with TensorFlow
8.2 Building complex apps
8.2 1 Creating multi-page apps
8.2 2 Handling authentication
8.2 3 Building interactive dashboards
8.3 Custom components
8.3 1 Creating custom widgets
8.3 2 Extending Streamlit with custom components
9 Case Studies
9.1 Building a data exploration app
9.2 Building a machine learning model deployment app
9.3 Building a real-time data visualization app
8 2 1 Creating Multi-Page Apps Explained

2 1 Creating Multi-Page Apps Explained

Key Concepts

Explanation

Multi-Page Apps

Multi-page apps in Streamlit allow you to create applications with multiple distinct pages. Each page can have its own unique content and functionality, providing a more organized and user-friendly experience.

Page Navigation

Page navigation enables users to switch between different pages within the app. This can be achieved using Streamlit's sidebar, buttons, or URL routing.

Session State

Session state allows data to persist across different pages within the same session. This is useful for maintaining user inputs, settings, and other variables as the user navigates through the app.

Page Configuration

Page configuration involves setting up individual pages within the app. Each page is typically defined in its own Python file, and the main app file handles the routing to these pages.

URL Routing

URL routing maps specific URLs to different pages within the app. This allows users to directly access specific pages by entering the corresponding URL.

Examples

Example 1: Basic Multi-Page App

import streamlit as st

def page1():
    st.title("Page 1")
    st.write("Welcome to Page 1!")

def page2():
    st.title("Page 2")
    st.write("Welcome to Page 2!")

pages = {
    "Page 1": page1,
    "Page 2": page2,
}

st.sidebar.title("Navigation")
selection = st.sidebar.radio("Go to", list(pages.keys()))

page = pages[selection]
page()
    

Example 2: Using Session State

import streamlit as st

if 'counter' not in st.session_state:
    st.session_state.counter = 0

def page1():
    st.title("Page 1")
    st.write("Counter:", st.session_state.counter)
    if st.button("Increment"):
        st.session_state.counter += 1

def page2():
    st.title("Page 2")
    st.write("Counter:", st.session_state.counter)
    if st.button("Decrement"):
        st.session_state.counter -= 1

pages = {
    "Page 1": page1,
    "Page 2": page2,
}

st.sidebar.title("Navigation")
selection = st.sidebar.radio("Go to", list(pages.keys()))

page = pages[selection]
page()
    

Example 3: URL Routing

import streamlit as st
from streamlit.web.server import Server

def page1():
    st.title("Page 1")
    st.write("Welcome to Page 1!")

def page2():
    st.title("Page 2")
    st.write("Welcome to Page 2!")

pages = {
    "/page1": page1,
    "/page2": page2,
}

def main():
    path = st.experimental_get_query_params().get("page", ["/page1"])[0]
    if path in pages:
        pages[path]()
    else:
        st.error("Page not found")

if __name__ == "__main__":
    main()
    

Analogies

Think of a multi-page app as a book with multiple chapters. Page navigation is like flipping through the pages of the book. Session state is like a bookmark that remembers your last read position. Page configuration is like organizing the chapters in a logical order. URL routing is like having a table of contents that allows you to jump directly to a specific chapter.

By mastering the creation of multi-page apps in Streamlit, you can build more complex and user-friendly applications that provide a seamless and organized user experience.