GSMEthesis commited on
Commit
51a6712
·
verified ·
1 Parent(s): a637734

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -72
app.py CHANGED
@@ -737,7 +737,67 @@ h3 {
737
  </style>
738
  """, unsafe_allow_html=True)
739
 
740
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
741
  def create_ride_map():
742
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
743
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
@@ -1208,60 +1268,9 @@ def custom_likert_slider(question_data):
1208
 
1209
 
1210
  def random_likert_questions():
1211
- """نمایش سوالات لیکرت به ترتیب مشخص با اسلایدر پیش‌فرض Streamlit"""
1212
- # تعریف گروه‌های سوالات
1213
  question_groups = [
1214
- {
1215
- "title": "عدالت توزیعی",
1216
- "key": "distributive",
1217
- "questions": [
1218
- {
1219
- "key": "distributive_1",
1220
- "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1221
- "scale": 7,
1222
- "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"]
1223
- },
1224
- {
1225
- "key": "distributive_2",
1226
- "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1227
- "scale": 7,
1228
- "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
1229
- },
1230
- {
1231
- "key": "distributive_3",
1232
- "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1233
- "scale": 7,
1234
- "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]
1235
- }
1236
- ]
1237
- },
1238
- {
1239
- "title": "سوال توجه",
1240
- "key": "attention_check",
1241
- "questions": [
1242
- {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ می‌دهید؟", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
1243
- ]
1244
- },
1245
- {
1246
- "title": "عدالت رویه‌ای",
1247
- "key": "procedural",
1248
- "questions": [
1249
- {"key": "procedural_1", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1250
- {"key": "procedural_2", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1251
- {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1252
- ]
1253
- },
1254
- {
1255
- "title": "عدالت اطلاعاتی",
1256
- "key": "informational",
1257
- "questions": [
1258
- {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1259
- {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1260
- {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1261
- {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1262
- {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1263
- ]
1264
- }
1265
  ]
1266
 
1267
  # مقداردهی اولیه
@@ -1271,29 +1280,30 @@ def random_likert_questions():
1271
  # دریافت گروه جاری
1272
  current_group = question_groups[st.session_state.current_likert_group]
1273
 
1274
- # نمایش عنوان گروه
1275
- st.markdown(f"<h3>{current_group['title']}</h3>")
 
 
 
 
 
 
1276
 
 
1277
  for question in current_group['questions']:
1278
  answer = custom_likert_slider(question)
1279
- st.session_state.answers[question["key"]] = answer
1280
-
1281
- # دکمه ادامه/اتمام
1282
- button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1283
 
1284
- if st.button(button_label):
1285
- # ذخیره پاسخ‌ها قبل از رفتن به گروه بعدی
1286
- for question in current_group['questions']:
1287
- if question["key"] in st.session_state:
1288
- st.session_state.answers[question["key"]] = st.session_state[question["key"]]
1289
-
1290
- # رفتن به گروه بعدی یا صفحه پایانی
1291
- if st.session_state.current_likert_group < len(question_groups) - 1:
1292
- st.session_state.current_likert_group += 1
1293
- st.rerun()
1294
- else:
1295
- st.session_state.current_page = "explanation_questions"
1296
  st.rerun()
 
1297
  def explanation_questions():
1298
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1299
  st.markdown("### 📋 سوالات تکمیلی")
 
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
+ # مقدار پیش‌فرض از session_state یا وسط طیف
748
+ default_value = st.session_state.get(key, (points + 1) // 2)
749
+
750
+ # ایجاد یک container برای گروه‌بندی بهتر
751
+ with st.container():
752
+ st.markdown(f"<p style='font-size:16px; margin-bottom:5px;'>{question}</p>", unsafe_allow_html=True)
753
+
754
+ # استفاده از st.slider با key منحصر به فرد
755
+ value = st.slider(
756
+ "",
757
+ min_value=1,
758
+ max_value=points,
759
+ value=default_value,
760
+ step=1,
761
+ key=f"slider_{key}_unique" # اضافه کردن پسوند منحصر به فرد
762
+ )
763
+
764
+ # ذخیره فوری مقدار در session_state
765
+ st.session_state[key] = value
766
+ if 'answers' not in st.session_state:
767
+ st.session_state.answers = {}
768
+ st.session_state.answers[key] = value
769
+
770
+ # نمایش لیبل‌ها و مقدار انتخاب شده
771
+ st.markdown(
772
+ f"""
773
+ <div style="display: flex; justify-content: space-between; font-size: 12px; margin: 5px 0;">
774
+ <span>{labels[0]}</span>
775
+ <span>{labels[1]}</span>
776
+ </div>
777
+ <p style='text-align:center; color:#6a0dad; font-weight:bold;'>
778
+ پاسخ شما: {value}
779
+ </p>
780
+ """,
781
+ unsafe_allow_html=True
782
+ )
783
+
784
+ # استایل‌های سفارشی برای اسلایدر
785
+ st.markdown("""
786
+ <style>
787
+ div[role="slider"] {
788
+ background: #e0e0e0 !important;
789
+ }
790
+ .stSlider .st-bd {
791
+ background-color: #6a0dad !important;
792
+ }
793
+ .stSlider .st-be {
794
+ background-color: #6a0dad !important;
795
+ }
796
+ </style>
797
+ """, unsafe_allow_html=True)
798
+
799
+ return value
800
+
801
  def create_ride_map():
802
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
803
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
 
1268
 
1269
 
1270
  def random_likert_questions():
1271
+ """نمایش سوالات لیکرت به ترتیب مشخص"""
 
1272
  question_groups = [
1273
+ # تعریف گروه‌های سوالات (همان کد قبلی)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1274
  ]
1275
 
1276
  # مقداردهی اولیه
 
1280
  # دریافت گروه جاری
1281
  current_group = question_groups[st.session_state.current_likert_group]
1282
 
1283
+ # نمایش راهنمای پاسخ
1284
+ st.markdown("""
1285
+ <div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px; margin-bottom: 20px;">
1286
+ <h4>راهنمای پاسخ:</h4>
1287
+ <p>لطفاً برای هر سوال با حرکت دادن اسلایدر، میزان موافقت خود را مشخص کنید.</p>
1288
+ <p>مقادیر از چپ به راست: کاملاً مخالفم ← کاملاً موافقم</p>
1289
+ </div>
1290
+ """, unsafe_allow_html=True)
1291
 
1292
+ # نمایش تمام سوالات گروه جاری
1293
  for question in current_group['questions']:
1294
  answer = custom_likert_slider(question)
 
 
 
 
1295
 
1296
+ # دکمه ادامه/اتمام
1297
+ col1, col2 = st.columns([1, 2])
1298
+ with col2:
1299
+ button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "اتمام پرسشنامه"
1300
+ if st.button(button_label, use_container_width=True):
1301
+ if st.session_state.current_likert_group < len(question_groups) - 1:
1302
+ st.session_state.current_likert_group += 1
1303
+ else:
1304
+ st.session_state.current_page = "explanation_questions"
 
 
 
1305
  st.rerun()
1306
+
1307
  def explanation_questions():
1308
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1309
  st.markdown("### 📋 سوالات تکمیلی")