GSMEthesis commited on
Commit
ed52941
·
verified ·
1 Parent(s): 8254f68

Update app.py

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