GSMEthesis commited on
Commit
282c16e
·
verified ·
1 Parent(s): 9a5cb6d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -15
app.py CHANGED
@@ -739,50 +739,55 @@ h3 {
739
 
740
  # ========== توابع اصلی ==========
741
  def custom_likert_slider(question_data):
742
- """Custom Likert-style question with circles and labels that returns the actual selected value."""
743
  question = question_data["question"]
744
  key = question_data["key"]
745
  scale = question_data["scale"]
746
  labels = question_data.get("labels", ["کمترین", "بیشترین"])
747
 
 
748
  default_value = st.session_state.get(key, (scale + 1) // 2)
749
 
750
- # ایجاد رادیو باتن‌ها با حلقه
751
- radio_buttons = "".join([
752
- f'<input type="radio" id="radio_{key}_{i}" name="{key}" value="{i}" style="width: 30px; height: 30px;" '
753
- f'{"checked" if st.session_state.get(f"radio_{key}", default_value) == i else ""} '
754
- f'onclick="updateSlider({i}, \'{key}\')">'
755
- for i in range(1, scale + 1)
756
- ])
757
 
 
758
  html = f"""
759
  <div style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
760
  <label style="font-size: 16px; font-weight: bold; display: block; text-align: center;">{question}</label>
761
  <div style="display: flex; justify-content: center; align-items: center; gap: 10px; margin: 10px 0;">
762
  <span>{labels[0]}</span>
763
  <div style="display: flex; gap: 10px;">
764
- {radio_buttons}
 
 
 
 
 
765
  </div>
766
  <span>{labels[1]}</span>
767
  </div>
768
- <p id="selected_value_{key}" style='text-align:center; color:#6a0dad; font-weight:bold;'>
769
- پاسخ شما: {st.session_state.get(f"radio_{key}", default_value)}
770
  </p>
771
  </div>
772
 
773
  <script>
774
- function updateSlider(value, key) {{
775
- document.getElementById("selected_value_" + key).innerHTML = "پاسخ شما: " + value;
 
776
 
 
777
  window.parent.postMessage({{
778
  type: 'streamlit:setComponentValue',
779
  key: key,
780
  value: value
781
  }}, '*');
782
 
 
783
  window.parent.postMessage({{
784
  type: 'streamlit:setSessionState',
785
- key: "radio_" + key,
786
  value: value
787
  }}, '*');
788
  }}
@@ -790,7 +795,9 @@ def custom_likert_slider(question_data):
790
  """
791
 
792
  components.html(html, height=200)
793
- return st.session_state.get(f"radio_{key}", default_value)
 
 
794
 
795
  def create_ride_map():
796
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
739
 
740
  # ========== توابع اصلی ==========
741
  def custom_likert_slider(question_data):
742
+ """Custom Likert-style question that correctly captures user selection"""
743
  question = question_data["question"]
744
  key = question_data["key"]
745
  scale = question_data["scale"]
746
  labels = question_data.get("labels", ["کمترین", "بیشترین"])
747
 
748
+ # مقدار پیش‌فرض از session_state یا وسط مقیاس
749
  default_value = st.session_state.get(key, (scale + 1) // 2)
750
 
751
+ # مقدار انتخاب شده کاربر (اگر وجود دارد)
752
+ selected_value = st.session_state.get(f"selected_{key}", default_value)
 
 
 
 
 
753
 
754
+ # HTML و JavaScript برای کامپوننت سفارشی
755
  html = f"""
756
  <div style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
757
  <label style="font-size: 16px; font-weight: bold; display: block; text-align: center;">{question}</label>
758
  <div style="display: flex; justify-content: center; align-items: center; gap: 10px; margin: 10px 0;">
759
  <span>{labels[0]}</span>
760
  <div style="display: flex; gap: 10px;">
761
+ {"".join([
762
+ f'<input type="radio" id="radio_{key}_{i}" name="{key}" value="{i}" style="width: 30px; height: 30px;" '
763
+ f'{"checked" if selected_value == i else ""} '
764
+ f'onclick="updateSelection({i}, \'{key}\')">'
765
+ for i in range(1, scale + 1)
766
+ ])}
767
  </div>
768
  <span>{labels[1]}</span>
769
  </div>
770
+ <p id="display_{key}" style='text-align:center; color:#6a0dad; font-weight:bold;'>
771
+ پاسخ شما: {selected_value}
772
  </p>
773
  </div>
774
 
775
  <script>
776
+ function updateSelection(value, key) {{
777
+ // نمایش مقدار انتخاب شده
778
+ document.getElementById("display_" + key).innerHTML = "پاسخ شما: " + value;
779
 
780
+ // ارسال مقدار به Streamlit
781
  window.parent.postMessage({{
782
  type: 'streamlit:setComponentValue',
783
  key: key,
784
  value: value
785
  }}, '*');
786
 
787
+ // ذخیره در session
788
  window.parent.postMessage({{
789
  type: 'streamlit:setSessionState',
790
+ key: "selected_" + key,
791
  value: value
792
  }}, '*');
793
  }}
 
795
  """
796
 
797
  components.html(html, height=200)
798
+
799
+ # بازگرداندن مقدار انتخاب شده کاربر
800
+ return selected_value
801
 
802
  def create_ride_map():
803
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""