見出し画像

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.inputの画面

文字入力をし、下部に表示することができました。
しかし新しい文字を入力すると、文字が消えてしまう。

リストに入れて入力値を保存するなら、@st.cacheを使います。

キャッシュを保存するメソッドは引数にallow_output_mutation True
を入れます。


allow_output_mutation(True)について

Streamlitは、戻り値が変更されると警告を表示します。これは、意図しない結果をもたらす可能性があるためです。これは、戻り値を内部でハッシュすることによって行われます。
何をしているのかがわかっていて、この警告を上書きしたい場合は、これをTrueに設定してください。

公式:allow_output_mutation (bool)


では、先ほど書いた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)


st.cache使用

if inputで入力された時にlstの中にlistのappendメソッドが効くように追加しています。


表示を変える

st.table(lst)
st.tableを使用

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で組める小規模プロダクト開発を承ってます!
したいことを形にいたします。ぜひのぞいてみてください。

https://fdg-consulting.com/


参考:引用元

https://qiita.com/Taka_input/items/fa8f2200cd4a4cbf9699



ご覧いただきありがとうございました。 サポートしていただいたお金は開発費にかけさせていただきます。