# Streamlit

Streamlit to framework (platforma, szkielet do budowy aplikacji) do tworzenie aplikacji web-owych z wykorzystaniem języka Python. Nie wymaga znajomości HTML-a, Javascript-u, czy CSS-a. 

Powstał z myślą głównie o zastosowaniach w analizie danych (tworzenie różnej maści dashboardów etc). Jednak społeczność jego użytkowników często stosuje go do zastosowań mocno odbiegających od tej tematyki.

## Instalacja i dodanie do programu

Framework ten możemy zainstalować wykorzystując menadżera pakietów `pip`:

```
pip3 install streamlit
```

Importujemy go do aplikacji w standardowy sposób, poprzez `import`. Przyjęło się wykorzystywać tę bibliotekę pod nazwą `st` (stąd pojawiają się po `import` dodatkowe słowa `as st`):

```python
import streamlit as st

st.write("Hello World!")

```

## Uruchamianie aplikacji

Aplikacje stworzone z Streamlit-em NIE SĄ uruchamiane w "normalny" sposób (czyli np. poprzez `python nazwaprogramu.py` czy guzik play w VSCode).  Zamiast tego musimy:

```
streamlit run nazwaprogramu.py
```

Dzięki temu uruchamiany jest serwer www umożliwiający nam oglądanie naszej aplikacji w przeglądarce i pozostała funkcjonalność niezbędna Streamlit-owi.

## Podstawowe komponenty Streamlit-a

Zachęcam do przejrzenia oficjalnej dokumentacji dostępnej pod:

[https://docs.streamlit.io/](https://docs.streamlit.io/)

Zawiera ona bardzo dobre przykłady dla wszystkich dostępnych komponentów.

### Tytuł okna

```python

st.set_page_config(page_title="Jakiś tytuł")

```

### Komponenty "tekstowe" 


#### st.write("tekst")

- jeden z najbardziej uniwersalnych komponentów umożliwia wyświetlanie tekstu, markdownu, ramek danych, obrazków. Komponent ten rozpoznaje też tekst zapisany w markdown-ie, dzięki czemu może oszczędzić nam korzystania z kompomentów takich jak title, header, czy subheader.

#### st.title("tekst")

- umożliwia stworzenie tytułu (H1)

#### st.header("tekst")

- nagłówek
- można dodać parametr `divider`, który doda podkreślenie


### Komponenty do wprowadzania / wyboru danych 

#### st.text_input()

- pole do wprowadzania danych

#### st.slider()

- suwak
- możemy dodać min_value i max_value, które ograniczą nam zakres do wyboru

#### st.checkbox()

- pole do zaznaczenia "ptaszkiem"

#### st.multiselect()

- umożliwia wybrania kilka elementów z jakiegoś zakresu danych

### Wykresy

#### st.bar_chart()

- wykres słupkowy

#### st.line_chart()

- wykres liniowy

#### st.scatter_chart

- wykres punktowy

# Formularze

Wciśnięcie / wybranie jakiegokolwiek elementu na stronie zbudowanej z pomocą Streamlit-a spowoduje jej całkowite przeładowanie. 
 
Wyjątkiem jest formularz - jego zawartość jest przeładowywana jedynie po wciśnięciu odpowiedniego przycisku.

```python
import streamlit as st

with st.form("Jakiś formularz"):
    st.write("Wewnątrz formularza")
    slider_val = st.slider("Suwak")
    checkbox_val = st.checkbox("Checkbox")

    # Formularz powinien mieć przycisk do wysłania.
    submitted = st.form_submit_button("Wyślij")
    if submitted:
        st.write("Suwak: ", slider_val, "Checkbox: ", checkbox_val)

st.write("Poza formularzem")
```

# Przechowywanie stanu zmiennych

Co w przypadku gdy nie korzystamy z formularza i mamy potrzebę przechowania stanu jakiejś zmiennej, tak żeby nie została ona odświeżona po wciśnięciu przycisku lub wykonaniu innej akcji?

W tym celu udostępnia specjalną zmienną session state:

<https://docs.streamlit.io/develop/api-reference/caching-and-state/st.session_state>

## Odnośniki

„Streamlit Documentation”. Dostęp 18 sierpień 2024. [https://docs.streamlit.io/](https://docs.streamlit.io/).