前提・実現したいこと
現在、特定のデータセットを読み込んで、複数の側面から可視化する
アプリをStreamlitで作成しようと考えています。(あくまで下の図はテスト的なものです)
発生している問題・エラーメッセージ
その第一歩として、下記画面のように、サイドバーで複数の機能選択できるselectboxを用意し、サイドバー内で
データセットを読み込むボタンを付けました。(ボタンを押すことで、仮で作った変数hogeを3に変更しています。)
そして、一つの機能の中でフォームを作成し、フォームの中にパラメータを設定できる
ようにしてformの中にsubmitボタンを付け、submitボタンを押すことで、
読み込んだデータセットと、設定したパラメータを利用してplotlyなどで
グラフを描画する機能を作りたいと考えています。
しかし、実際に下記のようなコードで実施してみたところ、
formのsubmitボタンを押下したタイミングで、データセットの読み込みが
初期化されてしまいます。(hogeが1に初期化されている。本当は読み込んだデータを、submitボタン押下後も保持したい。)
submitボタンを押したときに、データセットの取得した結果は残したまま、
グラフの描画のみを行う場合はどのようにすればよいか、ご教示いただけないでしょうか。
(データ取得ボタンを付けないという選択肢もあるとは思いますが、データセットは運用の都合上、
現状はとても重いExcelファイル等からの取得とせざるを得ず、ボタンを押したときだけ
読み込むような感じで、できるだけ最小頻度の読み込みとしたいです。)
該当のソースコード
Python3
import streamlit as st from pathlib import Path import sys import numpy as np import pandas as pd import re def a_function(): # form sample with st.form('my_form_identifier'): slider_val = st.slider("Form slider") checkbox_val = st.checkbox("Form checkbox") # st.form_submit_button('Submit to me') # Every form must have a submit button. submitted = st.form_submit_button("Submit") if submitted: st.write("slider", slider_val, "checkbox", checkbox_val) st.write("グラフ表示(予定)") # 読み込んだデータセットと、formで設定した値を使って、何らかのグラフ描画などを行いたい # container sample st.container() def b_function(): # columns sample col1, col2, col3 = st.columns(3) with col1: st.header("A cat") st.image("https://static.streamlit.io/examples/cat.jpg") with col2: st.header("A dog") st.image("https://static.streamlit.io/examples/dog.jpg") with col3: st.header("An owl") st.image("https://static.streamlit.io/examples/owl.jpg") def main(): st.title("ほげほげデータビューワ") mode_list = ["a機能", "b機能"] func_sel = st.sidebar.selectbox("機能を選んでください", mode_list) hoge = 1 # データ取得処理 get_data_source = st.sidebar.button("データ取得、更新") if get_data_source: # 何らかのデータ取得処理を記載(ボタン押下時のみ取ってくるようにする) hoge = 3 st.text("データ取得しました。") pass st.text(f"hoge:{hoge}") if func_sel == "a機能": a_function() else: b_function() if __name__ == "__main__": main()
試したこと
簡単なサンプルを作り、試行錯誤した。
Streamlitのリファレンスを確認した。
補足情報(FW/ツールのバージョンなど)
Python 3.8.7
Streamlit 1.0.0
まだ回答がついていません
会員登録して回答してみよう