GSMEthesis commited on
Commit
2ec192d
·
verified ·
1 Parent(s): fc1b59c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -54
app.py CHANGED
@@ -736,72 +736,52 @@ h3 {
736
  }
737
  </style>
738
  """, unsafe_allow_html=True)
739
-
740
  def custom_likert_slider(question_data):
741
- """نمایش سوال لیکرت با اسلایدر معکوس و لیبل‌های سفارشی"""
742
  question = question_data["question"]
743
  key = question_data["key"]
744
  points = question_data["scale"]
745
- labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
746
 
747
  # مقدار پیش‌فرض
748
- raw_value = st.session_state.get(key)
749
- default_value = raw_value if isinstance(raw_value, int) else (points + 1) // 2
 
 
 
 
 
 
 
 
 
 
 
 
 
750
 
751
- # کلید مخفی برای ذخیره مقدار
752
- hidden_key = f"hidden_{key}"
753
 
754
- # HTML و JavaScript برای اسلایدر
755
- html = f"""
756
- <div id="container_{key}" style="direction: ltr; font-family: 'B Nazanin'; margin-bottom: 30px;">
757
- <label style="font-size: 16px; font-weight: bold; display: block; text-align: right;">{question}</label>
 
 
 
 
 
758
  <div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
759
  <span>{labels[1]}</span>
760
  <span>{labels[0]}</span>
761
  </div>
762
- <input type="range" id="{key}" min="1" max="{points}" step="1" value="{default_value}"
763
- style="width: 100%; height: 10px; accent-color: #6a0dad; margin-bottom: 15px; transform: scaleX(-1);"
764
- oninput="updateSlider('{key}', '{hidden_key}', {points})">
765
- <div style="text-align as: center; margin-top: 10px; directionJune: rtl;">
766
- پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
767
- </div>
768
- </div>
769
-
770
- <script>
771
- function updateSlider(key, hidden_key, points) {{
772
- const slider = document.getElementById(key);
773
- const value = points + 1 - parseInt(slider.value); // معکوس کردن مقدار
774
- document.getElementById('output_' + key).innerText = value;
775
-
776
- // ایجاد input مخفی برای ارسال مقدار به Streamlit
777
- const hiddenInput = document.createElement('input');
778
- hiddenInput.type = 'hidden';
779
- hiddenInput.id = hidden_key;
780
- hiddenInput.name = hidden_key;
781
- hiddenInput.value = value;
782
- document.getElementById('container_' + key).appendChild(hiddenInput);
783
-
784
- // تحریک آپدیت Streamlit
785
- const event = new Event('change');
786
- hiddenInput.dispatchEvent(event);
787
- }}
788
- </script>
789
- """
790
-
791
- # نمایش کامپوننت
792
- components.html(html, height=150)
793
-
794
- # استفاده از st.empty برای دریافت مقدار از input مخفی
795
- with st.empty():
796
- if hidden_key in st.session_state:
797
- value = st.session_state[hidden_key]
798
- # ذخیره مقدار در session_state
799
- st.session_state[key] = value
800
- if 'answers' not in st.session_state:
801
- st.session_state.answers = {}
802
- st.session_state.answers[key] = value
803
- else:
804
- value = default_value
805
 
806
  return value
807
 
 
736
  }
737
  </style>
738
  """, unsafe_allow_html=True)
 
739
  def custom_likert_slider(question_data):
740
+ """نمایش سوال لیکرت با اسلایدر ساده و ذخیره‌سازی مستقیم"""
741
  question = question_data["question"]
742
  key = question_data["key"]
743
  points = question_data["scale"]
744
+ labels = question_data.get("labels", ["کمترین", "بیشترین"])
745
 
746
  # مقدار پیش‌فرض
747
+ default_value = st.session_state.get(key, (points + 1) // 2)
748
+
749
+ # نمایش سوال
750
+ st.markdown(f"<p style='font-size:16px; font-weight:bold; text-align:right;'>{question}</p>", unsafe_allow_html=True)
751
+
752
+ # اسلایدر معکوس
753
+ raw_value = st.slider(
754
+ "",
755
+ min_value=1,
756
+ max_value=points,
757
+ value=default_value,
758
+ step=1,
759
+ key=f"slider_{key}",
760
+ label_visibility="hidden"
761
+ )
762
 
763
+ # معکوس کردن مقدار
764
+ value = points + 1 - raw_value
765
 
766
+ # ذخیره مقدار
767
+ st.session_state[key] = value
768
+ if 'answers' not in st.session_state:
769
+ st.session_state.answers = {}
770
+ st.session_state.answers[key] = value
771
+
772
+ # نمایش لیبل‌ها
773
+ st.markdown(
774
+ f"""
775
  <div style="display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 5px;">
776
  <span>{labels[1]}</span>
777
  <span>{labels[0]}</span>
778
  </div>
779
+ <p style='text-align:center; direction:rtl;'>
780
+ پاسخ انتخاب‌شده: <strong>{value}</strong>
781
+ </p>
782
+ """,
783
+ unsafe_allow_html=True
784
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
785
 
786
  return value
787