Pythonの優秀UIツールStreamlitでリストをつくる、run.pyの自動化
StreamlitはフロントエンドまわりのUIを作ってくれるので、小規模のプロダクトで重宝しています。
Pythonのテーブルを扱う外部ライブラリのpandasのメソッドと強く連携してるので、データの差異、集合、分析に使えます。最近思ったのが、テーブル分析だけじゃなくて、テーブルを作れないかなって考えてまして。入力したデータの保存方法を探していました。
テーブルデータをつくる
テーブルデータをcsv入力だけにせず、UI上でデータ入力しようというのが今回の目的です。
inputメソッドで入力窓を作る
main.py
import streamlit as st
input = st.text_input('文字入力')
st.write(input)
文字入力をし、下部に表示することができました。
しかし新しい文字を入力すると、文字が消えてしまう。
リストに入れて入力値を保存するなら、@st.cacheを使います。
キャッシュを保存するメソッドは引数にallow_output_mutation (True)
を入れます。
allow_output_mutation(True)について
では、先ほど書いたmain.pyを書き換えていきます。
main.py
import streamlit as st
import pyautogui as pg
@st.cache(allow_output_mutation=True)
def cache_lst():
lst = []
return lst
lst = cache_lst()
input = st.text_input("文字入力")
if input:
lst.append(input)
pg.hotkey('Ctrl', 'a')
pg.hotkey('delete')
st.write(lst)
if inputで入力された時にlstの中にlistのappendメソッドが効くように追加しています。
表示を変える
st.table(lst)
tableを使用すると、indexに0,1,とついて2次元配列(テーブル)になりましたね。
要素が残る挙動をなくす
pyautoguiを使用しているのは入力した後に、もう一度選択をし直しをするので、省くためctrl+aで強制的に文字を選択し新しい文字入力ができるようにフォーカスしています。
その後にctrl+deleteで文字のフォーカスから削除し、要素を消しています。
これで同じ要素を追加してしまう挙動をなくしました。
これでリストを作成することができました。
run main.pyの自動化
起動する際にカレントディレクトリに移動しstreamlitを起動し、Python run main.pyコマンドで起動しています。
cd C:\Users\username\Desktop>
>>C:\Users\username\Desktop
streamlit run main.py
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
Network URL: http://●●●●●:8501
これを自動化させます。
自動起動のしかた
stream…と入力すると非常に面倒なので、自動起動ファイルをつくります。
run_main.bat
メモ帳を立ち上げ以下を入力
cd c:\main.py があるディレクトリのパス
streamlit run main.py
.batの拡張子をつけて保存。
次回からrun_main.batのファイルをクリックするだけで起動することができます。
これをスタートアップに登録すれば、自動でstreamlitが立ち上がるのでおすすめ。
スタートアップの登録
Windowsマーク→右クリック→ファイル名を実行→shell:startupと入力→フォルダが立ち上がるのでショートカットを入れる
宣伝
Streamlitで組める小規模プロダクト開発を承ってます!
したいことを形にいたします。ぜひのぞいてみてください。
ご覧いただきありがとうございました。 サポートしていただいたお金は開発費にかけさせていただきます。