Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -3,6 +3,7 @@ import folium
|
|
| 3 |
from streamlit_folium import folium_static
|
| 4 |
import streamlit.components.v1 as components
|
| 5 |
from datetime import datetime
|
|
|
|
| 6 |
import gspread
|
| 7 |
from google.oauth2.service_account import Credentials
|
| 8 |
import os
|
|
@@ -211,6 +212,17 @@ html, body, .stApp {
|
|
| 211 |
.rahyar-subtitle {
|
| 212 |
color: var(--primary) !important;
|
| 213 |
margin: 0 !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
font-size: 16px !important;
|
| 215 |
}
|
| 216 |
|
|
@@ -833,8 +845,8 @@ def enhanced_likert_scale(question_data):
|
|
| 833 |
|
| 834 |
<div>
|
| 835 |
<div class="likert-labels">
|
| 836 |
-
<span>{labels[1]}</span>
|
| 837 |
<span>{labels[0]}</span>
|
|
|
|
| 838 |
</div>
|
| 839 |
<div class="likert-line">
|
| 840 |
"""
|
|
@@ -842,7 +854,7 @@ def enhanced_likert_scale(question_data):
|
|
| 842 |
# اضافه کردن نقاط فقط برای مقادیر 1 تا scale
|
| 843 |
current_value = st.session_state.get(key, 0)
|
| 844 |
for i in range(1, scale+1):
|
| 845 |
-
value =
|
| 846 |
active_class = "active" if current_value == value else ""
|
| 847 |
scale_html += f"<div class='likert-dot {active_class}'></div>"
|
| 848 |
|
|
@@ -880,6 +892,7 @@ def enhanced_likert_scale(question_data):
|
|
| 880 |
|
| 881 |
return st.session_state.get(key)
|
| 882 |
|
|
|
|
| 883 |
def create_ride_map():
|
| 884 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
| 885 |
# نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
|
|
@@ -934,7 +947,7 @@ def show_explanation(exp_type):
|
|
| 934 |
"شرایط جوی: هوای بارانی (++)"
|
| 935 |
],
|
| 936 |
"counterfactual": [
|
| 937 |
-
|
| 938 |
]
|
| 939 |
}
|
| 940 |
|
|
@@ -1052,15 +1065,13 @@ def welcome_page():
|
|
| 1052 |
style="width: 200px; height: auto; margin-bottom: 10px;">
|
| 1053 |
</div>
|
| 1054 |
<div style="flex: 1;">
|
| 1055 |
-
<h3>به پرسشنامه ما خوش آمدید 🌟</h3>
|
| 1056 |
<p>با سلام و احترام،</p>
|
| 1057 |
-
<p>ا
|
| 1058 |
-
<p>شرکت در این مطالعه کاملاً داوطلبانه است؛ پاسخ د
|
| 1059 |
-
<p>
|
| 1060 |
<p>برای آغاز پرسشنامه، لطفاً روی دکمه زیر کلیک کنید 👇🏻</p>
|
| 1061 |
</div>
|
| 1062 |
</div>
|
| 1063 |
-
</div>
|
| 1064 |
""", unsafe_allow_html=True)
|
| 1065 |
|
| 1066 |
if st.button("شروع پرسشنامه", key="start_btn", type="primary"):
|
|
@@ -1086,16 +1097,18 @@ def scenario_explanation():
|
|
| 1086 |
""", unsafe_allow_html=True)
|
| 1087 |
|
| 1088 |
st.markdown("### سناریوی تحقیق")
|
| 1089 |
-
|
|
|
|
|
|
|
| 1090 |
st.markdown("""
|
| 1091 |
<div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
|
| 1092 |
-
<p>فرض کنید در روزی از روزها
|
| 1093 |
-
<p> گوشیتان را از کیف درمیآورید. چشمتان به آیکون
|
| 1094 |
-
<
|
| 1095 |
-
<p>با کنجکاوی اپ را باز میکنید. ظاهر ساده و روانی دارد. فعلاً فقط گزینهی «سفر معمولی» فعال است. خبری از امکانات اضافه مثل «سفر دومسیـره»، «توقف در مسیر»، «اکوپلاس» یا «موتورسوار» نیست — اما خب، رهیار تازهکار است و قرار است توسعه پیدا کند!.</p>
|
| 1096 |
<p>مبدأ و مقصد را انتخاب میکنید و با قیمت <strong>200 هزار تومان</strong> مواجه میشوید.</p>
|
| 1097 |
<p>با کلیک روی «ادامه»، اطلاعات سفر را مشاهده کنید 👇🏻</p>
|
| 1098 |
</div>
|
|
|
|
| 1099 |
""", unsafe_allow_html=True)
|
| 1100 |
|
| 1101 |
if st.button("ادامه", key="continue_btn", type="primary"):
|
|
@@ -1119,9 +1132,9 @@ def map_view():
|
|
| 1119 |
|
| 1120 |
st.markdown("""
|
| 1121 |
<div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
|
| 1122 |
-
<p>مسیر سفر شما به صورت حدودی، از جنوب به غرب تهران است.</p>
|
| 1123 |
-
<p> با توجه به اطلاعاتی که بعد از نقشه دریافت میکنید، تصمیم بگیرید که سفر را میپذیرید را رد میکنید.</p>
|
| 1124 |
-
<p>سپس با کلیک بر دکمه مربوطه به بخش بعدی بروید.</p>
|
| 1125 |
</div>
|
| 1126 |
""", unsafe_allow_html=True)
|
| 1127 |
st.markdown("### مسیر سفر شما")
|
|
@@ -1169,7 +1182,7 @@ def attention_check1():
|
|
| 1169 |
st.markdown("### سوال")
|
| 1170 |
|
| 1171 |
answer = st.radio(
|
| 1172 |
-
"رنگ لوگو
|
| 1173 |
["قرمز", "سبز", "بنفش", "آبی", "فراموش کردم"],
|
| 1174 |
index=None,
|
| 1175 |
key="att1_radio"
|
|
@@ -1214,13 +1227,21 @@ def attention_check1():
|
|
| 1214 |
st.rerun()
|
| 1215 |
else:
|
| 1216 |
st.warning("لطفاً یک گزینه را انتخاب کنید")
|
| 1217 |
-
|
| 1218 |
def random_likert_questions():
|
| 1219 |
"""نمایش سوالات لیکرت با دکمههای دایرهای"""
|
| 1220 |
question_groups = [
|
| 1221 |
{
|
| 1222 |
-
"title": "سری اول س
|
| 1223 |
"key": "distributive",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1224 |
"questions": [
|
| 1225 |
{
|
| 1226 |
"key": "distributive_1",
|
|
@@ -1243,24 +1264,42 @@ def random_likert_questions():
|
|
| 1243 |
]
|
| 1244 |
},
|
| 1245 |
{
|
| 1246 |
-
"title": "س
|
| 1247 |
"key": "attention_check",
|
| 1248 |
"questions": [
|
| 1249 |
-
{"key": "attention_check2", "question": "
|
| 1250 |
]
|
| 1251 |
},
|
| 1252 |
{
|
| 1253 |
-
"title": "سری
|
| 1254 |
"key": "procedural",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1255 |
"questions": [
|
| 1256 |
-
{"key": "procedural_1", "question": "فرآیند و رویه قیمتگذاری
|
| 1257 |
-
{"key": "procedural_2", "question": "فرآیند و رویه قیمتگذاری
|
| 1258 |
-
{"key": "procedural_3", "question": "فرآیند و رویه قیمتگذاری
|
| 1259 |
]
|
| 1260 |
},
|
| 1261 |
{
|
| 1262 |
-
"title": "سری
|
| 1263 |
"key": "informational",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1264 |
"questions": [
|
| 1265 |
{"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
|
| 1266 |
{"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
|
|
@@ -1270,41 +1309,33 @@ def random_likert_questions():
|
|
| 1270 |
]
|
| 1271 |
}
|
| 1272 |
]
|
| 1273 |
-
|
| 1274 |
-
# مقداردهی اولیه
|
| 1275 |
if 'current_likert_group' not in st.session_state:
|
| 1276 |
st.session_state.current_likert_group = 0
|
| 1277 |
|
| 1278 |
current_group = question_groups[st.session_state.current_likert_group]
|
| 1279 |
|
|
|
|
| 1280 |
st.markdown(f"## {current_group['title']}")
|
| 1281 |
-
|
| 1282 |
-
|
| 1283 |
-
|
| 1284 |
-
|
| 1285 |
-
|
| 1286 |
-
|
| 1287 |
-
|
| 1288 |
-
|
| 1289 |
-
|
| 1290 |
-
|
| 1291 |
-
|
| 1292 |
-
|
| 1293 |
-
|
| 1294 |
-
|
| 1295 |
-
|
| 1296 |
-
|
| 1297 |
-
|
| 1298 |
-
|
| 1299 |
-
|
| 1300 |
-
زیر طیف جعبهای وجود دارد که مقدار پیشفرض آن صفر است. با زدن دکمه مثبت و منفی کنار جعبه، این عدد را بین یک تا هفت تنظیم کنید.
|
| 1301 |
-
</p>
|
| 1302 |
-
<p style="font-size: inherit !important;">
|
| 1303 |
-
اگر از پاسخهایتان مطمئن هستید، روی دکمه «ادامه» کلیک کنید.
|
| 1304 |
-
</p>
|
| 1305 |
-
</div>
|
| 1306 |
-
</div>
|
| 1307 |
-
""", unsafe_allow_html=True)
|
| 1308 |
|
| 1309 |
# نمایش تمام سوالات این گروه
|
| 1310 |
for question in current_group['questions']:
|
|
@@ -1337,6 +1368,7 @@ def random_likert_questions():
|
|
| 1337 |
st.session_state.current_page = "explanation_questions"
|
| 1338 |
st.rerun()
|
| 1339 |
|
|
|
|
| 1340 |
def explanation_questions():
|
| 1341 |
"""نمایش سوالات تکمیلی به صورت مرحلهای با دکمه ادامه"""
|
| 1342 |
st.markdown("### 📋 سوالات تکمیلی")
|
|
|
|
| 3 |
from streamlit_folium import folium_static
|
| 4 |
import streamlit.components.v1 as components
|
| 5 |
from datetime import datetime
|
| 6 |
+
import textwrap
|
| 7 |
import gspread
|
| 8 |
from google.oauth2.service_account import Credentials
|
| 9 |
import os
|
|
|
|
| 212 |
.rahyar-subtitle {
|
| 213 |
color: var(--primary) !important;
|
| 214 |
margin: 0 !important;
|
| 215 |
+
font-size: 12px !important;
|
| 216 |
+
}
|
| 217 |
+
.warning {
|
| 218 |
+
color: black !important;
|
| 219 |
+
margin: 0 !important;
|
| 220 |
+
font-weight: bold !important;
|
| 221 |
+
font-size: 16px !important;
|
| 222 |
+
}
|
| 223 |
+
.little {
|
| 224 |
+
color: black !important;
|
| 225 |
+
margin: 0 !important;
|
| 226 |
font-size: 16px !important;
|
| 227 |
}
|
| 228 |
|
|
|
|
| 845 |
|
| 846 |
<div>
|
| 847 |
<div class="likert-labels">
|
|
|
|
| 848 |
<span>{labels[0]}</span>
|
| 849 |
+
<span>{labels[1]}</span>
|
| 850 |
</div>
|
| 851 |
<div class="likert-line">
|
| 852 |
"""
|
|
|
|
| 854 |
# اضافه کردن نقاط فقط برای مقادیر 1 تا scale
|
| 855 |
current_value = st.session_state.get(key, 0)
|
| 856 |
for i in range(1, scale+1):
|
| 857 |
+
value = i # مقادیر از 1 تا scale
|
| 858 |
active_class = "active" if current_value == value else ""
|
| 859 |
scale_html += f"<div class='likert-dot {active_class}'></div>"
|
| 860 |
|
|
|
|
| 892 |
|
| 893 |
return st.session_state.get(key)
|
| 894 |
|
| 895 |
+
|
| 896 |
def create_ride_map():
|
| 897 |
"""ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
|
| 898 |
# نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
|
|
|
|
| 947 |
"شرایط جوی: هوای بارانی (++)"
|
| 948 |
],
|
| 949 |
"counterfactual": [
|
| 950 |
+
"اگرعجله ندارید و درخواست خود را 1 ساعت بعد تکرار کنید، احتمالاً تقاضا کمترخواهد بود، رانندگان فعال در اطراف شما بیشتر خواهد بود، زمان روز و شرایط جوی بهتر خواهد بود؛ پس قیمت حدوداً 40٪ کمتر (120 هزار تومان) خواهد بود.",
|
| 951 |
]
|
| 952 |
}
|
| 953 |
|
|
|
|
| 1065 |
style="width: 200px; height: auto; margin-bottom: 10px;">
|
| 1066 |
</div>
|
| 1067 |
<div style="flex: 1;">
|
|
|
|
| 1068 |
<p>با سلام و احترام،</p>
|
| 1069 |
+
<p>این پرسشنامه بخشی از یک پژوهش دانشگاهی است که در قالب پایاننامه کارشناسیارشد در دانشگاه صنعتی شریف انجام میشود. این تحقیق به <strong> بررسی ادراک مصرفکنندگان از انصاف در قیمتگذاریِ اپلیکیشنهای تاکسی اینترنتی (مانند اسنپ و تپسی 🚖) </strong> میپردازد.</p>
|
| 1070 |
+
<p> پر کردن این پرسشنامه کمتر از 5 دقیقه وقت شما را میگیرد. شرکت در این مطالعه کاملاً داوطلبانه است؛ پاسخ درست یا غلطی برای سوالات وجود ندارد و نظرات شخصی شما است که ارزشمند است و برای پیشبرد اهداف علمی تحلیل خواهند شد. </p>
|
| 1071 |
+
<p> پاسخهای شما کمک شایانی به ما، به عنوان یک تیم تحقیقاتی در دانشگاه صنعتی شریف، برای ارتقای دانش علمی خواهد کرد. پیشاپیش از مشارکت شما صمیمانه سپاسگزاریم 🙏</p>
|
| 1072 |
<p>برای آغاز پرسشنامه، لطفاً روی دکمه زیر کلیک کنید 👇🏻</p>
|
| 1073 |
</div>
|
| 1074 |
</div>
|
|
|
|
| 1075 |
""", unsafe_allow_html=True)
|
| 1076 |
|
| 1077 |
if st.button("شروع پرسشنامه", key="start_btn", type="primary"):
|
|
|
|
| 1097 |
""", unsafe_allow_html=True)
|
| 1098 |
|
| 1099 |
st.markdown("### سناریوی تحقیق")
|
| 1100 |
+
st.markdown("""
|
| 1101 |
+
<p class="warning">در این بخش با یک سناریو فرضی مواجه خواهید شد. خواهشمندیم صفحه را به پایین بکشید، سناریو را به دقت مطالعه فرمایید، خودتان را در موقعیت تصور کنید و طبق آن پرسشنامه را ادامه دهید.</p>
|
| 1102 |
+
""", unsafe_allow_html=True)
|
| 1103 |
st.markdown("""
|
| 1104 |
<div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
|
| 1105 |
+
<p>فرض کنید در روزی از روزها بعد از اتمام ساعت کاری، شما قصد دارید از محل کارتان در جنوب تهران، برای انجام خریدی به غرب تهران بروید. شما امروز همراه خود ماشین به محل کار نبردید. </p>
|
| 1106 |
+
<p> گوشیتان را از کیف درمیآورید. چشمتان به آیکون اپلیکیشنی که اخیراً نصب کرده بودید اما تا به حال بررسی نکرده بودید، میافتد؛ اپلیکیشنی به نام <strong>رهیار</strong> — نه اسنپ است و نه تپسی، اما خیلی شبیه آنها و رقیب جدید آنهاست. به تازگی در تهران خدمات ارائه میدهد. رنگ بنفش جذابی دارد. تصمیم میگیرید این بار این اپلیکیشن جدید را برای سفر خود امتحان کنید.</p>
|
| 1107 |
+
<p>با کنجکاوی اپ را باز میکنید. ظاهر ساده و روانی دارد. قبلاً شنیده بودید که در رهیار فعلاً فقط گزینهی «سفر معمولی» فعال است. اما خب، رهیار تازهکار است و قرار است توسعه پیدا کند!</p>
|
|
|
|
| 1108 |
<p>مبدأ و مقصد را انتخاب میکنید و با قیمت <strong>200 هزار تومان</strong> مواجه میشوید.</p>
|
| 1109 |
<p>با کلیک روی «ادامه»، اطلاعات سفر را مشاهده کنید 👇🏻</p>
|
| 1110 |
</div>
|
| 1111 |
+
|
| 1112 |
""", unsafe_allow_html=True)
|
| 1113 |
|
| 1114 |
if st.button("ادامه", key="continue_btn", type="primary"):
|
|
|
|
| 1132 |
|
| 1133 |
st.markdown("""
|
| 1134 |
<div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
|
| 1135 |
+
<p class="warning">مسیر سفر شما به صورت حدودی، از جنوب به غرب تهران است.</p>
|
| 1136 |
+
<p class="warning"> لطفاً صفحه را به پایین بکشید. سپس با توجه به اطلاعاتی که بعد از نقشه دریافت میکنید، تصمیم بگیرید که سفر را میپذیرید را رد میکنید.</p>
|
| 1137 |
+
<p class="warning">سپس با کلیک بر دکمه مربوطه به بخش بعدی بروید.</p>
|
| 1138 |
</div>
|
| 1139 |
""", unsafe_allow_html=True)
|
| 1140 |
st.markdown("### مسیر سفر شما")
|
|
|
|
| 1182 |
st.markdown("### سوال")
|
| 1183 |
|
| 1184 |
answer = st.radio(
|
| 1185 |
+
"رنگ لوگو اپلیکیشن رهیار چگونه بود؟",
|
| 1186 |
["قرمز", "سبز", "بنفش", "آبی", "فراموش کردم"],
|
| 1187 |
index=None,
|
| 1188 |
key="att1_radio"
|
|
|
|
| 1227 |
st.rerun()
|
| 1228 |
else:
|
| 1229 |
st.warning("لطفاً یک گزینه را انتخاب کنید")
|
|
|
|
| 1230 |
def random_likert_questions():
|
| 1231 |
"""نمایش سوالات لیکرت با دکمههای دایرهای"""
|
| 1232 |
question_groups = [
|
| 1233 |
{
|
| 1234 |
+
"title": "سری اول سؤالات",
|
| 1235 |
"key": "distributive",
|
| 1236 |
+
"guide": textwrap.dedent("""
|
| 1237 |
+
<h4 class="warning">راهنمای پاسخ به سری اول:</h4>
|
| 1238 |
+
<p class="little">
|
| 1239 |
+
در این بخش، با یک سری سؤال درمورد قیمتی که در صفحه اطلاعات سفر و در زیر نقشه دیدید، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1240 |
+
- سمت چپ (۱): کاملاً نامنصفانه، غیرمعقول یا غیرقابل قبول<br>
|
| 1241 |
+
- سمت راست (۷): کاملاً منصفانه، معقول یا قابل قبول<br>
|
| 1242 |
+
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را با زدن دکمه + و – جعبه زیر طیف انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که چقدر قیمت به نظرتان منصفانه بوده. چقدر با توجه به شرایط منطقی بوده و چقدر قابل قبول بوده.
|
| 1243 |
+
</p>
|
| 1244 |
+
"""),
|
| 1245 |
"questions": [
|
| 1246 |
{
|
| 1247 |
"key": "distributive_1",
|
|
|
|
| 1264 |
]
|
| 1265 |
},
|
| 1266 |
{
|
| 1267 |
+
"title": "فقط پاسخ دهید.",
|
| 1268 |
"key": "attention_check",
|
| 1269 |
"questions": [
|
| 1270 |
+
{"key": "attention_check2", "question": "لطفاً خیلی زیاد (عدد 7) را انتخاب کنید.", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
|
| 1271 |
]
|
| 1272 |
},
|
| 1273 |
{
|
| 1274 |
+
"title": "سری دوم سؤالات",
|
| 1275 |
"key": "procedural",
|
| 1276 |
+
"guide": textwrap.dedent("""
|
| 1277 |
+
<h4 class="warning">راهنمای پاسخ به سری دوم:</h4>
|
| 1278 |
+
<p class="little">
|
| 1279 |
+
در این بخش با یک سری جمله خبری درمورد فرآیند و رویه قیمتگذاری رهیار مواجه خواهید شد. در زیر جملات یک طیف قرار دارد:<br>
|
| 1280 |
+
- سمت چپ (۱): کاملاً مخالفم<br>
|
| 1281 |
+
- سمت راست (۷): کاملاً موافقم<br>
|
| 1282 |
+
لطفاً نظر خود را با انتخاب عدد مناسب بیان کنید.
|
| 1283 |
+
</p>
|
| 1284 |
+
"""),
|
| 1285 |
"questions": [
|
| 1286 |
+
{"key": "procedural_1", "question": "فرآیند و رویه قیمتگذاری رهیار قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
|
| 1287 |
+
{"key": "procedural_2", "question": "فرآیند و رویه قیمتگذاری رهیار منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
|
| 1288 |
+
{"key": "procedural_3", "question": "فرآیند و رویه قیمتگذاری رهیار معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
|
| 1289 |
]
|
| 1290 |
},
|
| 1291 |
{
|
| 1292 |
+
"title": "سری سوم سؤالات",
|
| 1293 |
"key": "informational",
|
| 1294 |
+
"guide": textwrap.dedent("""
|
| 1295 |
+
<h4 class="warning">راهنمای پاسخ به سری سوم:</h4>
|
| 1296 |
+
<p class="little">
|
| 1297 |
+
در این بخش، با یک سری سؤال درمورد توضیحاتی که در صفحه اطلاعات سفر و در زیر نقشه درمورد قیمت به شما ارائه شد، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
|
| 1298 |
+
- سمت چپ (۱): هیچ<br>
|
| 1299 |
+
- سمت راست (۷): خیلی زیاد<br>
|
| 1300 |
+
لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را با زدن دکمه + و – جعبه زیر طیف انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که از هیچ مقدار تا خیلی زیاد به چه مقدار به شما توضیح با ویژگیهای سوال ارائه شده است.
|
| 1301 |
+
</p>
|
| 1302 |
+
"""),
|
| 1303 |
"questions": [
|
| 1304 |
{"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
|
| 1305 |
{"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
|
|
|
|
| 1309 |
]
|
| 1310 |
}
|
| 1311 |
]
|
| 1312 |
+
# مقداردهی اولیه
|
|
|
|
| 1313 |
if 'current_likert_group' not in st.session_state:
|
| 1314 |
st.session_state.current_likert_group = 0
|
| 1315 |
|
| 1316 |
current_group = question_groups[st.session_state.current_likert_group]
|
| 1317 |
|
| 1318 |
+
|
| 1319 |
st.markdown(f"## {current_group['title']}")
|
| 1320 |
+
|
| 1321 |
+
if 'guide' in current_group:
|
| 1322 |
+
# ترکیب CSS و HTML با جایگذاری امن
|
| 1323 |
+
guide_html = textwrap.dedent("""
|
| 1324 |
+
<div class="guide-text" style="
|
| 1325 |
+
display: flex;
|
| 1326 |
+
flex-direction: column;
|
| 1327 |
+
background-color: #f0f2f6;
|
| 1328 |
+
border-radius: 10px;
|
| 1329 |
+
padding: 15px;
|
| 1330 |
+
gap: 10px;
|
| 1331 |
+
direction: rtl;
|
| 1332 |
+
text-align: justify;
|
| 1333 |
+
">
|
| 1334 |
+
{}
|
| 1335 |
+
</div>
|
| 1336 |
+
""").format(current_group['guide'])
|
| 1337 |
+
|
| 1338 |
+
st.markdown(guide_html, unsafe_allow_html=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1339 |
|
| 1340 |
# نمایش تمام سوالات این گروه
|
| 1341 |
for question in current_group['questions']:
|
|
|
|
| 1368 |
st.session_state.current_page = "explanation_questions"
|
| 1369 |
st.rerun()
|
| 1370 |
|
| 1371 |
+
|
| 1372 |
def explanation_questions():
|
| 1373 |
"""نمایش سوالات تکمیلی به صورت مرحلهای با دکمه ادامه"""
|
| 1374 |
st.markdown("### 📋 سوالات تکمیلی")
|