前回はStreamlitを使ってシンプルなメモ帳を作成しました。
今回は、そこで作成したコードに少し手を加えて編集機能を追加していきたいと思います。
完成イメージとしては編集画面から、既存のメモを修正できるようになるイメージです。
メモの編集機能の追加
ユーザーが既存のメモを編集できる機能を追加するために、以下の手順でコードを更新しました。
1. メニューに「編集」を追加
menu = ["新規メモ", "既存メモ", "編集", "削除"]
choice = st.sidebar.selectbox("メニュー", menu)
既存のメニューに「編集」を追加しました。ユーザーはこのメニューを選択することでメモの編集機能を利用できます。
2. 「編集」メニューの処理
elif choice == "編集":
st.subheader("メモ編集")
memo_list = os.listdir(MEMO_FOLDER)
selected_memo = st.selectbox("編集するメモを選択", memo_list)
if selected_memo:
memo_content = load_memo(selected_memo)
if memo_content is not None:
edited_content = st.text_area("編集内容", value=memo_content)
if st.button("保存"):
save_memo(selected_memo, edited_content)
st.success("メモが編集されました。")
「編集」メニューが選択された際の処理を追加しました。まず、既存のメモ一覧から編集するメモを選択できるようにします。
選択したメモがある場合、そのメモの内容を load_memo
関数を使って読み込みます。その後、st.text_area
を使用して編集内容のテキストエリアを表示します。ここで、value=memo_content
を指定することで、最初にメモの内容が表示されるようにしています。
ユーザーがテキストエリア内で編集を行い、「保存」ボタンをクリックすると、編集された内容が save_memo
関数を使用して保存されます。編集が成功した場合、メッセージが表示されます。
コード全体
import streamlit as st
import os
MEMO_FOLDER = "memos"
def create_memo():
memo_content = st.text_area("メモ内容")
return memo_content
def save_memo(memo_name, memo_content):
memo_path = os.path.join(MEMO_FOLDER, memo_name)
with open(memo_path, "w") as f:
f.write(memo_content)
def load_memo(memo_name):
memo_path = os.path.join(MEMO_FOLDER, memo_name)
if os.path.exists(memo_path):
with open(memo_path, "r") as f:
return f.read()
else:
return None
def delete_memo(memo_name):
memo_path = os.path.join(MEMO_FOLDER, memo_name)
if os.path.exists(memo_path):
os.remove(memo_path)
st.success(f"メモ '{memo_name}' を削除しました。")
else:
st.error("指定されたメモは存在しません。")
def main():
st.title("シンプルメモアプリ")
if not os.path.exists(MEMO_FOLDER):
os.makedirs(MEMO_FOLDER)
menu = ["新規メモ", "既存メモ", "編集", "削除"]
choice = st.sidebar.selectbox("メニュー", menu)
if choice == "新規メモ":
st.subheader("新規メモ作成")
memo_name = st.text_input("メモの名前")
memo_content = create_memo()
if st.button("保存"):
save_memo(memo_name, memo_content)
st.success("メモが保存されました。")
elif choice == "既存メモ":
st.subheader("既存メモ表示")
memo_list = os.listdir(MEMO_FOLDER)
selected_memo = st.selectbox("メモを選択", memo_list)
if selected_memo:
memo_content = load_memo(selected_memo)
if memo_content is not None:
st.write(memo_content)
else:
st.warning("選択したメモの内容は存在しません。")
elif choice == "編集":
st.subheader("メモ編集")
memo_list = os.listdir(MEMO_FOLDER)
selected_memo = st.selectbox("編集するメモを選択", memo_list)
if selected_memo:
memo_content = load_memo(selected_memo)
if memo_content is not None:
edited_content = st.text_area("編集内容", value=memo_content)
if st.button("保存"):
save_memo(selected_memo, edited_content)
st.success("メモが編集されました。")
elif choice == "削除":
st.subheader("メモ削除")
memo_list = os.listdir(MEMO_FOLDER)
selected_memo = st.selectbox("削除するメモを選択", memo_list)
if st.button("削除"):
delete_memo(selected_memo)
if __name__ == "__main__":
main()