GSMEthesis commited on
Commit
252ebf7
·
verified ·
1 Parent(s): 891c3f2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -46
app.py CHANGED
@@ -752,7 +752,19 @@ def enhanced_likert_scale(question_data):
752
  st.markdown(f"<div style='text-align:center; font-weight:bold; margin-bottom:15px;'>{question}</div>",
753
  unsafe_allow_html=True)
754
 
755
- # ایجاد خط و نقاط با HTML/CSS
 
 
 
 
 
 
 
 
 
 
 
 
756
  scale_html = f"""
757
  <style>
758
  .likert-line {{
@@ -810,57 +822,23 @@ def enhanced_likert_scale(question_data):
810
  }}
811
  }}
812
  </style>
813
-
814
- <div class='likert-container'>
815
- <div class='likert-labels'>
816
- <span>{labels[1]}</span>
817
- <span>{labels[0]}</span>
818
- </div>
819
- <div class='likert-line'>
820
  """
821
 
822
- # اضافه کردن نقاط
823
- for i in range(scale):
824
- value = scale - i
825
- is_selected = st.session_state.get(key) == value
826
- scale_html += f"<div class='likert-dot {'selected' if is_selected else ''}' onclick='setLikertValue({value})'></div>"
827
-
828
- scale_html += "</div>"
829
-
830
  # نمایش مقدار انتخاب شده
831
  if st.session_state.get(key):
832
- scale_html += f"<div class='likert-value'>پاسخ شما: {st.session_state[key]}</div>"
833
 
834
  scale_html += "</div>"
835
-
836
- # تزریق JavaScript برای مدیریت کلیک
837
- components.html(scale_html + """
838
- <script>
839
- function setLikertValue(value) {
840
- const streamlitDoc = window.parent.document;
841
- const buttons = streamlitDoc.querySelectorAll('button[data-testid="stButton"]'); // جستجوی دکمه‌ها در DOM
842
- buttons.forEach(btn => {
843
- if (btn.textContent.trim() === String(value)) {
844
- btn.click(); // کلیک روی دکمه مورد نظر برای انتخاب مقدار
845
- }
846
- });
847
- }
848
- </script>
849
- """, height=80)
850
-
851
- # دکمه‌های واقعی (مخفی و کوچک)
852
- btn_cols = st.columns(scale)
853
- for i in range(scale):
854
- with btn_cols[i]:
855
- value = scale - i
856
- if st.button(
857
- str(value),
858
- key=f"{key}_btn_{value}",
859
- type="primary" if st.session_state.get(key) == value else "secondary",
860
- help="این دکمه‌ها مخفی هستند" # پیام راهنما
861
- ):
862
- st.session_state[key] = value
863
- st.rerun()
864
 
865
  return st.session_state.get(key)
866
 
 
752
  st.markdown(f"<div style='text-align:center; font-weight:bold; margin-bottom:15px;'>{question}</div>",
753
  unsafe_allow_html=True)
754
 
755
+ # ایجاد سلکت باکس برای انتخاب گزینه‌ها
756
+ selected_value = st.selectbox(
757
+ "لطفاً یک گزینه را انتخاب کنید:",
758
+ options=range(1, scale+1), # گزینه‌ها از 1 تا scale
759
+ index=st.session_state.get(key) - 1 if st.session_state.get(key) else 0, # پیش‌فرض انتخاب شده
760
+ key=f"select_{key}",
761
+ format_func=lambda x: labels[x-1] # برچسب‌ها برای هر گزینه
762
+ )
763
+
764
+ # ذخیره انتخاب کاربر
765
+ st.session_state[key] = selected_value
766
+
767
+ # نمایش خط و دکمه‌ها با HTML/CSS
768
  scale_html = f"""
769
  <style>
770
  .likert-line {{
 
822
  }}
823
  }}
824
  </style>
 
 
 
 
 
 
 
825
  """
826
 
 
 
 
 
 
 
 
 
827
  # نمایش مقدار انتخاب شده
828
  if st.session_state.get(key):
829
+ scale_html += f"<div class='likert-value'>پاسخ شما: {labels[st.session_state[key] - 1]}</div>"
830
 
831
  scale_html += "</div>"
832
+
833
+ # تزریق HTML/CSS برای خط و نقاط
834
+ components.html(scale_html, height=80)
835
+
836
+ # دکمه ارسال (پررنگ و فعال)
837
+ button_label = "ثبت پاسخ"
838
+ if st.session_state.get(key) is not None:
839
+ st.button(button_label, use_container_width=True, key=f"submit_{key}", type="primary")
840
+ else:
841
+ st.button(button_label, use_container_width=True, key=f"submit_{key}", type="secondary")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
842
 
843
  return st.session_state.get(key)
844