=============== Automatic Range =============== Two aids in the script help in automating any range changes. In the first an inline if clause is used where the numpy arange function, either adds ``1`` to the ``to_val`` (to) or if the ``tick_val`` (tickinterval) is less than 1 then adds tick_val to the to_val:: data = np.arange(from_val, (to_val+1 if tick_val >=1 else to_val+tick_val), tick_val) The second is more complicated, in most ranges both the ``from`` and ``to`` range values are shown, but in the case of 0 to 255, as used in RGB displays, the highest value ``to`` is not usually displayed, as the Scale becomes too long if tick intervals are smaller than 10 or 20. The slider's maximum position will be at the ``to`` value, with its actual display value. On the other hand the highest range value shown will be the second to last in our range of values and its ``x`` position will be correspondingly less than the slider's maximum position. In all cases the ``from`` value (x_min) is shown, so no change is required here, only the x_max or the position of the last displayed tick has to change:: if range_vals[-1] == to_val: pass else: max_rv = range_vals[-1] mult_x = ((max_rv-from_val)*x_max/(to_val-from_val)) The actual value position uses the relative x computation uses an actual x placement, which helps in calibration:: x=(x_min + i / (len_rvs - 1) * ((x_max if range_vals[-1] == to_val else mult_x) - x_min)), Both these changes are already in the calibration script.