Streamlitを使ってシンプルメモアプリを作成しよう!編集機能追加

Python

前回は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()


タイトルとURLをコピーしました