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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -26
app.py CHANGED
@@ -739,7 +739,7 @@ h3 {
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,56 +748,45 @@ def custom_likert_slider(question_data):
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 - نسخه اصلاح شده با مناطق عمومی"""
 
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
  # مقدار پیش‌فرض از 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 - نسخه اصلاح شده با مناطق عمومی"""