awacke1's picture
Create app.py
62f0f3f verified
raw
history blame
5.36 kB
import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
import plotly.express as px
import plotly.graph_objects as go
import pydeck as pdk
from PIL import Image
import cv2
import io
st.set_page_config(page_title="Streamlit Comprehensive Demo πŸš€", page_icon="πŸ“", layout="wide")
def main():
st.title("🎨 Streamlit Comprehensive Showcase")
st.markdown("Explore the various features of Streamlit in this interactive demo!")
# Sidebar for navigation
demo_type = st.sidebar.selectbox(
"Choose a Demo",
["Basic Elements", "Data Visualization", "Interactive Widgets", "Advanced Features"]
)
if demo_type == "Basic Elements":
show_basic_elements()
elif demo_type == "Data Visualization":
show_data_visualization()
elif demo_type == "Interactive Widgets":
show_interactive_widgets()
elif demo_type == "Advanced Features":
show_advanced_features()
def show_basic_elements():
st.header("1. Basic Elements")
st.subheader("1.1 Text Elements")
st.text("This is simple text")
st.markdown("This is **markdown** with _styling_")
st.latex(r"\begin{pmatrix}a & b \\ c & d\end{pmatrix}")
st.subheader("1.2 Data Display")
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
st.dataframe(df)
st.table(df)
st.json({"foo": "bar", "baz": "boz"})
st.subheader("1.3 Media Elements")
st.image("https://streamlit.io/images/brand/streamlit-mark-color.png", width=200)
st.audio("https://upload.wikimedia.org/wikipedia/commons/c/c4/Muriel-Nguyen-Xuan-Chopin-valse-opus64-1.ogg")
st.video("https://youtu.be/B2iAodr0fOo")
def show_data_visualization():
st.header("2. Data Visualization")
@st.cache_data
def load_data():
return pd.DataFrame(np.random.randn(20, 3), columns=["A", "B", "C"])
data = load_data()
st.subheader("2.1 Streamlit Charts")
st.line_chart(data)
st.area_chart(data)
st.bar_chart(data)
st.subheader("2.2 Altair Chart")
chart = alt.Chart(data).mark_circle().encode(
x='A', y='B', size='C', color='C', tooltip=['A', 'B', 'C'])
st.altair_chart(chart, use_container_width=True)
st.subheader("2.3 Plotly Chart")
fig = px.scatter(data, x="A", y="B", size="C", color="C")
st.plotly_chart(fig, use_container_width=True)
st.subheader("2.4 PyDeck Chart")
chart_data = pd.DataFrame(np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=['lat', 'lon'])
st.pydeck_chart(pdk.Deck(
map_style=None,
initial_view_state=pdk.ViewState(latitude=37.76, longitude=-122.4, zoom=11, pitch=50),
layers=[pdk.Layer('HexagonLayer', data=chart_data, get_position='[lon, lat]', radius=200, elevation_scale=4, elevation_range=[0, 1000], pickable=True, extruded=True)]
))
def show_interactive_widgets():
st.header("3. Interactive Widgets")
st.subheader("3.1 Input Widgets")
text_input = st.text_input("Enter some text")
number = st.number_input("Enter a number", min_value=0, max_value=100)
date = st.date_input("Pick a date")
st.subheader("3.2 Selection Widgets")
option = st.selectbox("Choose an option", ["Option 1", "Option 2", "Option 3"])
options = st.multiselect("Choose multiple options", ["A", "B", "C", "D"])
slider_val = st.slider("Pick a number", 0, 100)
st.subheader("3.3 Button and Download")
if st.button("Click me!"):
st.write("Button clicked!")
@st.cache_data
def get_sample_data():
return pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
csv = get_sample_data().to_csv(index=False)
st.download_button("Download CSV", csv, "sample_data.csv", "text/csv")
def show_advanced_features():
st.header("4. Advanced Features")
st.subheader("4.1 Layouts")
col1, col2 = st.columns(2)
with col1:
st.write("This is column 1")
with col2:
st.write("This is column 2")
with st.expander("Click to expand"):
st.write("This content is hidden by default")
st.subheader("4.2 Progress and Status")
progress_bar = st.progress(0)
for i in range(100):
progress_bar.progress(i + 1)
st.success("This is a success message!")
st.error("This is an error message!")
st.warning("This is a warning message!")
st.info("This is an info message!")
st.subheader("4.3 Cache and Performance")
@st.cache_data
def expensive_computation(a, b):
return a * b
result = expensive_computation(2, 21)
st.write(f"2 * 21 is {result}")
st.subheader("4.4 Session State")
if 'count' not in st.session_state:
st.session_state.count = 0
if st.button('Increment'):
st.session_state.count += 1
st.write('Count = ', st.session_state.count)
st.subheader("4.5 Forms")
with st.form("my_form"):
st.write("Inside the form")
slider_val = st.slider("Form slider")
checkbox_val = st.checkbox("Form checkbox")
submitted = st.form_submit_button("Submit")
if submitted:
st.write("Slider", slider_val, "Checkbox", checkbox_val)
st.subheader("4.6 Popover")
with st.popover("Click for Popover"):
st.write("This is a popover")
st.image("https://streamlit.io/images/brand/streamlit-mark-color.png", width=100)
if __name__ == "__main__":
main()