GSMEthesis commited on
Commit
c557c3c
·
verified ·
1 Parent(s): b9423e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -52
app.py CHANGED
@@ -740,61 +740,28 @@ h3 {
740
 
741
 
742
 
743
-
744
  def custom_likert_slider(question_data):
745
- """نمایش سوال لیکرت با اسلایدر 7 نقطه‌ای افقی و لیبل‌های سفارشی"""
746
  question = question_data["question"]
747
  key = question_data["key"]
748
- points = question_data["scale"] # تعداد نقاط (7 نقطه)
749
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
750
 
751
- # دریافت مقدار آخرین انتخاب از session_state (اگر موجود باشد)
752
- default_value = st.session_state.get(f"output_{key}", (points + 1) // 2) # استفاده از output_{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[0]}</span>
760
- <span>{labels[1]}</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;"
764
- oninput="updateSlider('{key}')">
765
- <div style="text-align: center; margin-top: 10px; direction: rtl;">
766
- پاسخ انتخاب‌شده: <strong><span id="output_{key}">{default_value}</span></strong>
767
- </div>
768
- </div>
769
 
770
- <script>
771
- function updateSlider(key) {{
772
- const value = parseInt(document.getElementById(key).value);
773
- document.getElementById('output_' + key).innerText = value;
774
-
775
- // ارسال مقدار به Streamlit
776
- window.parent.postMessage({{
777
- type: 'streamlit:setComponentValue',
778
- key: 'output_' + key,
779
- value: value
780
- }}, '*');
781
- }}
782
- </script>
783
- """
784
-
785
- # نمایش کامپوننت HTML
786
- components.html(html, height=150)
787
 
788
- # ذخیره‌سازی مقدار انتخابی در session_state
789
- # اینجا ما باید مقدار ذخیره‌شده رو از session_state بگیریم و تغییر بدیم
790
- st.session_state[f"output_{key}"] = default_value
791
- return default_value
792
 
793
- def save_likert_answers():
794
- """ذخیره مقادیر نهایی اسلایدرها در session_state پس از کلیک روی دکمه 'ادامه'"""
795
- for key in st.session_state.keys():
796
- if "distributive" in key or "procedural" in key or "informational" in key: # انتخاب کلیدهای مربوط به سوالات
797
- st.session_state[key] = st.session_state.get(key, None)
798
 
799
  def create_ride_map():
800
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
@@ -1244,7 +1211,7 @@ def random_likert_questions():
1244
 
1245
 
1246
  def random_likert_questions():
1247
- """نمایش سوالات لیکرت با اسلایدر پیش‌فرض Streamlit"""
1248
  # تعریف گروه‌های سوالات
1249
  question_groups = [
1250
  {
@@ -1281,11 +1248,10 @@ def random_likert_questions():
1281
  st.markdown(f"<h3>{current_group['title']}</h3>")
1282
 
1283
  for question in current_group["questions"]:
1284
- # اسلایدر پیش‌فرض Streamlit
1285
- value = st.slider(question["question"], min_value=1, max_value=question["scale"], value=(question["scale"] + 1) // 2)
1286
-
1287
  # ذخیره مقدار انتخابی در session_state
1288
- st.session_state[question["key"]] = value
1289
 
1290
  # دکمه ادامه
1291
  if st.button("ادامه"):
 
740
 
741
 
742
 
 
743
  def custom_likert_slider(question_data):
744
+ """نمایش سوال لیکرت با اسلایدر پیش‌فرض Streamlit و ویژگی‌های شخصی‌سازی شده"""
745
  question = question_data["question"]
746
  key = question_data["key"]
747
+ points = question_data["scale"] # تعداد نقاط اسلایدر (مثلاً 7 نقطه)
748
  labels = question_data.get("labels", ["کمترین", "بیشترین"]) # لیبل‌های پیش‌فرض
749
 
750
+ # بررسی اینکه مقدار قبلاً در session_state ذخیره شده یا نه
751
+ if key not in st.session_state:
752
+ # اگر مقدار ذخیره نشده باشد، مقدار پیش‌فرض وسط طیف انتخاب می‌شود
753
+ st.session_state[key] = (points + 1) // 2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
 
755
+ # اسلایدر پیش‌فرض Streamlit
756
+ value = st.slider(question, min_value=1, max_value=points, value=st.session_state[key], step=1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
757
 
758
+ # ذخیره‌سازی مقدار انتخاب‌شده در session_state
759
+ st.session_state[key] = value
 
 
760
 
761
+ # نمایش مقدار انتخاب‌شده زیر اسلایدر
762
+ st.write(f"پاسخ انتخاب‌شده: {value} ({labels[0]} - {labels[1]})")
763
+
764
+ return value
 
765
 
766
  def create_ride_map():
767
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
 
1211
 
1212
 
1213
  def random_likert_questions():
1214
+ """نمایش سوالات لیکرت به ترتیب مشخص با اسلایدر پیش‌فرض Streamlit"""
1215
  # تعریف گروه‌های سوالات
1216
  question_groups = [
1217
  {
 
1248
  st.markdown(f"<h3>{current_group['title']}</h3>")
1249
 
1250
  for question in current_group["questions"]:
1251
+ # فراخوانی اسلایدر پیش‌فرض برای هر سوال
1252
+ answer = custom_likert_slider(question)
 
1253
  # ذخیره مقدار انتخابی در session_state
1254
+ st.session_state[f"output_{question['key']}"] = answer
1255
 
1256
  # دکمه ادامه
1257
  if st.button("ادامه"):