質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

streamlitで、st_form_buttonで作ったボタンを押下した時に、 全体を初期化されないようにしたい

H.K2
H.K2

総合スコア82

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

0クリップ

2211閲覧

投稿2021/11/03 04:44

前提・実現したいこと

現在、特定のデータセットを読み込んで、複数の側面から可視化する
アプリを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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。