The Range widget class is fairly
complicated internally, but, like all the "base class" widgets, most of its
complexity is only interesting if you want to hack on it. Also, almost all
of the methods and signals it defines are only really used in writing
derived widgets. There are, however, a few useful methods that will work on
all range widgets.
The "update policy" of a range widget defines at what points
during user interaction it will change the value field of its
Adjustment and emit the "value_changed" signal on
this Adjustment. The update policies are:
UPDATE_CONTINUOUS | This is the default. The "value_changed" signal is emitted continuously, i.e., whenever the slider is moved by even the tiniest amount. |
UPDATE_DISCONTINUOUS | The "value_changed" signal is only emitted once the slider has stopped moving and the user has released the mouse button. |
UPDATE_DELAYED | The "value_changed" signal is emitted when the user releases the mouse button, or if the slider stops moving for a short period of time. |
The update policy of a range widget can be set by passing it to this method:
range.set_update_policy(policy)
Getting and setting the adjustment for a range widget "on the fly" is done, predictably, with:
adjustment = range.get_adjustment()
range.set_adjustment(adjustment)
The get_adjustment() method returns a
reference to the adjustment to which range is
connected.
The set_adjustment() method does
absolutely nothing if you pass it the adjustment that
range is already using, regardless of whether you
changed any of its fields or not. If you pass it a new
Adjustment, it will unreference the old one if it
exists (possibly destroying it), connect the appropriate signals to the new
one, and will recalculate the size and/or position of the slider and redraw
if necessary. As mentioned in the section on adjustments, if you wish to
reuse the same Adjustment, when you modify its values
directly, you should emit the "changed" signal on it, like this:
adjustment.emit("changed")