技術関連メディア

【Python】Streamlitで出てきたエラーと解決策のメモ [ 重複エラーver ]

Streamlitのエラーは該当部分の行を明示してくれるのでとても助かります。

実施環境:Windows11、VSCode、venv、Python 3.10.1


keyの重複エラー

UI上に表示されたエラー

DuplicateWidgetID: There are multiple identical st.slider widgets with the same generated key.

When a widget is created, it’s assigned an internal key based on its structure. Multiple widgets with an identical structure will result in the same internal key, which causes this error.

To fix this error, please pass a unique key argument to st.slider.

Traceback:
File “C:\Users\ユーザー名\Desktop\pythosm\app.py”, line 18, in
st.sidebar.slider(“スライド”, 0, 100, 50)

ターミナルに表示されたエラー文

streamlit.errors.DuplicateWidgetID: There are multiple identical st.slider widgets with the
same generated key.

When a widget is created, it’s assigned an internal key based on
its structure. Multiple widgets with an identical structure will
result in the same internal key, which causes this error.

To fix this error, please pass a unique key argument to
st.slider.

修正前コード

import streamlit as st

check = st.checkbox("チェックボックス") # チェックボタン

if check:
  st.button("ボタン")
  st.selectbox("1番目の選択肢がデフォルトとして表示される選択欄", ("選択肢1", "選択肢2"))
  st.multiselect("デフォルトでは空欄となっている選択欄", ("選択肢1", "選択肢2"))
  st.radio("ラジオボタン", ("選択1", "選択2"))
  st.text_input("テキストを1行に入れる枠")
  st.text_area("枠を広げることができるテキスト入力欄")
  st.slider("スライド", 0, 100, 50)
  st.file_uploader("ファイルをアップロードできる")
  
  # 以下をサイドバーに表示
  st.sidebar.text_input("サイドバーでテキスト入力")
  st.sidebar.text_area("入力欄")
  st.sidebar.slider("スライド", 0, 100, 50)
  st.sidebar.file_uploader("ファイルを選択")

対応内容

12行目のst.slider(“スライド”, 0, 100, 50)のkeyと、18行目のst.sidebar.slider(“スライド”, 0, 100, 50)のkeyの重複が許せぬとのこと。

12行目をst.slider(“スライド1”, 0, 100, 50)、18行目をst.sidebar.slider(“スライド2”, 0, 100, 50)にしたらエラーが消え、実装内容が正しく表示されるようになった。

修正後コード

import streamlit as st

check = st.checkbox("チェックボックス") # チェックボタン

if check:
  st.button("ボタン")
  st.selectbox("1番目の選択肢がデフォルトとして表示される選択欄", ("選択肢1", "選択肢2"))
  st.multiselect("デフォルトでは空欄となっている選択欄", ("選択肢1", "選択肢2"))
  st.radio("ラジオボタン", ("選択1", "選択2"))
  st.text_input("テキストを1行に入れる枠")
  st.text_area("枠を広げることができるテキスト入力欄")
  st.slider("スライド1", 0, 100, 50)
  st.file_uploader("ファイルをアップロードできる")
  
  # 以下をサイドバーに表示
  st.sidebar.text_input("サイドバーでテキスト入力")
  st.sidebar.text_area("入力欄")
  st.sidebar.slider("スライド2", 0, 100, 50)
  st.sidebar.file_uploader("ファイルを選択")

修正後のUI

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA