$? is the exit status of the last command that was run. In your case, that's of the [ command (which you use to test whether the true string is non-empty as a condition of your while loop).
You almost never need to use $? explicitly. Just do
la=500
while
mark=$(zenity --scale \
--text 'FREQUENCY' \
--value="$la" \
--min-value=0 \
--max-value=5000 \
--step=1)
do
echo "$mark"
la=$mark
done
Or simply:
mark=500
while
mark=$(zenity --scale \
--text 'FREQUENCY' \
--value="$mark" \
--min-value=0 \
--max-value=5000 \
--step=1)
do
echo "$mark"
done