import streamlit as st from tinydb import TinyDB, Query # データベースの初期化 db = TinyDB('db.json') # タイトル st.title("料理の材料管理アプリ") # 料理名、材料、個数の入力 recipe_name = st.text_input("料理名") ingredient_name = st.text_input("材料名") ingredient_amount = st.text_input("個数") # 登録ボタン if st.button("登録"): # データベースに保存 db.insert({"recipe_name": recipe_name, "ingredient_name": ingredient_name, "ingredient_amount": ingredient_amount}) st.success("登録しました") # 料理名の一覧表示 recipe_names = sorted(set([item["recipe_name"] for item in db.all()])) selected_recipe = st.selectbox("料理名", recipe_names) # 選択した料理の材料と個数を表示 ingredients = [item for item in db.all() if item["recipe_name"] == selected_recipe] for ingredient in ingredients: st.write(f"{ingredient['ingredient_name']} : {ingredient['ingredient_amount']}") # 材料チェック機能 with st.form(key="ingredient_check_form"): checked_ingredients = [] for ingredient in ingredients: checked = st.checkbox(ingredient["ingredient_name"]) if checked: checked_ingredients.append(ingredient) # 未チェックの材料を取得 unchecked_ingredients = [ingredient for ingredient in ingredients if ingredient not in checked_ingredients] # 全てチェックされた場合 if st.form_submit_button("送信"): if len(checked_ingredients) == len(ingredients): st.write("準備オッケー!") else: st.write("まだ準備できてないよ!") for ingredient in unchecked_ingredients: st.write(ingredient["ingredient_name"])