La clase Range es bastante complicada
internamente, pero, como todas las clases base de los controles, la mayoría
de su complejidad solo resulta de interés si se quiere trastear con ellos. Además,
la mayoría de los métodos y señales que define sólo son útiles al escribir
controles derivados. Hay, en cualquier caso, unos cuantos métodos útiles
que funcionarán con todos los controles de rango.
La "política de actualización" de un control de rango define en
qué puntos de la interacción con el usuario se cambiará el campo de valor de
su Adjustment y
emitirá la señal "value_changed" en este Adjustment.
Las políticas de actualización son:
UPDATE_CONTINUOUS | Es es el valor predeterminado. La señal "value_changed" se emite contínuamente, por ejemplo, cada vez que el deslizador se mueve, incluso en las cantidades mas minúsculas. |
UPDATE_DISCONTINUOUS | La señal "value_changed" sólo se mite una vez que el deslizador ha parado de moverse y el usuario ha soltado el botón del ratón. |
UPDATE_DELAYED | La señal "value_changed" se emite cuando el usuario suelta el botón del ratón, o si el deslizador deja de moverse durante un corto período de tiempo. |
La política de actualización de un control de rango puede cambiarse con este método:
range.set_update_policy(policy)
La obtención y cambio del ajuste de un control de rango se puede hacer sobre la marcha, como era predecible, con:
adjustment = range.get_adjustment()
range.set_adjustment(adjustment)
El método get_adjustment() devuelve una
referencia al adjustment que está conectado al rango.
El método set_adjustment() no hace
absolutamente nada si se le pasa el adjustment que el
range ya esté utilizando, independientemente de que se
le hayan cambiado alguno de sus campos o no. Si se le pasa un nuevo Adjustment, se perderá
la referencia al antiguo si existía (posiblemente se destruirá), se conectarán
las señales apropiadas al nuevo, y se recalculará el tamaño y/o posición del
deslizador y se repintará si es necesario. Como se mencionó en la sección
de ajustes, si se desea reutilizar el mismo Adjustment, cuando
se modifiquen sus valores directamente se debe emitir la señal "changed" desde él,
como por ejemplo:
adjustment.emit("changed")