# Scale (Python)

Marta Maria Casetti
mmcasetti@gmail.com 2012
Un élément graphique glissière pour choisir une valeur dans un intervalle
Luc Rebert,
traduc@rebert.name 2011
Alain Lojewski,
allomervan@gmail.com 2011-2012
Luc Pionchon
pionchon.luc@gmail.com 2011
Bruno Brouard
annoa.b@gmail.com 2011-12
Luis Menina
liberforce@freeside.fr 2014

# Échelle

Faites glisser les échelles !

# Code utilisé pour générer cet exemple

from gi.repository import Gtk import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="Scale Example", application=app) self.set_default_size(400, 300) self.set_border_width(5)

# two adjustments (initial value, min value, max value, # step increment - press cursor keys to see!, # page increment - click around the handle to see!, # page size - not used here) ad1 = Gtk.Adjustment(0, 0, 100, 5, 10, 0) ad2 = Gtk.Adjustment(50, 0, 100, 5, 10, 0)

# an horizontal scale self.h_scale = Gtk.Scale( orientation=Gtk.Orientation.HORIZONTAL, adjustment=ad1) # of integers (no digits) self.h_scale.set_digits(0) # that can expand horizontally if there is space in the grid (see # below) self.h_scale.set_hexpand(True) # that is aligned at the top of the space allowed in the grid (see # below) self.h_scale.set_valign(Gtk.Align.START)

# we connect the signal "value-changed" emitted by the scale with the callback # function scale_moved self.h_scale.connect("value-changed", self.scale_moved)

# a vertical scale self.v_scale = Gtk.Scale( orientation=Gtk.Orientation.VERTICAL, adjustment=ad2) # that can expand vertically if there is space in the grid (see below) self.v_scale.set_vexpand(True)

# we connect the signal "value-changed" emitted by the scale with the callback # function scale_moved self.v_scale.connect("value-changed", self.scale_moved)

# a label self.label = Gtk.Label() self.label.set_text("Move the scale handles...")

# a grid to attach the widgets grid = Gtk.Grid() grid.set_column_spacing(10) grid.set_column_homogeneous(True) grid.attach(self.h_scale, 0, 0, 1, 1) grid.attach_next_to( self.v_scale, self.h_scale, Gtk.PositionType.RIGHT, 1, 1) grid.attach(self.label, 0, 1, 2, 1)

self.add(grid)

# any signal from the scales is signaled to the label the text of which is # changed def scale_moved(self, event): self.label.set_text("Horizontal scale is " + str(int(self.h_scale.get_value())) + "; vertical scale is " + str(self.v_scale.get_value()) + ".")

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): Gtk.Application.do_startup(self)

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Méthodes utiles pour un élément graphique échelle

Pour construire une échelle Gtk.Scale, il faut un Gtk.Adjustment. C'est la représentation d'une valeur avec une limite inférieure et supérieure, des incréments d'étape et de page, d'une taille de page et est construite sous la forme `Gtk.Adjustment(valeur, inferieure, superieure, step_increment, page_increment, page_size)`, où les champs sont du type flottant `float` ; `step_increment` est l'incrément ou décrément obtenu par l'utilisation des touches fléchées et `page_increment` est celui obtenu en cliquant sur l'échelle elle-même. Notez que la taille `page_size` n'est pas utilisée dans notre exemple et que sa valeur doit être définie à `0`.

In line 28 the signal `"value-changed"` is connected to the callback function `scale_moved()` using `widget.connect(signal, callback function)`. See for a more detailed explanation.

La méthode `get_value()` récupère la valeur actuelle de l'échelle ; `set_value(valeur)` la définit (si la `valeur`, du type `float`, est en dehors des limites inférieure ou supérieure, elle sera rétrécie pour tenir à l'intérieur). Ce sont les méthodes de la classe Gtk.Range.

Utilisez `set_draw_value(faux)` pour éviter d'afficher la valeur actuelle sous forme d'une chaîne à côté de la glissière.

Pour surligner la partie d'échelle située entre l'origine et la valeur actuelle :

self.h_scale.set_restrict_to_fill_level(faux) self.h_scale.set_fill_level(self.h_scale.get_value()) self.h_scale.set_show_fill_level(vrai)

dans la fonction de rappel du signal « value-changed », pour avoir le nouveau remplissage chaque fois que la valeur est modifiée. Ce sont les méthodes de la classe Gtk.Range.

La méthode `add_mark(valeur, position, marqueur)` ajoute un marqueur à la `valeur` (`float` ou `int` selon la précision de l'échelle) dans `position` (`Gtk.PositionType.LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM`) avec le texte `Null` ou `marqueur` en langage Pango Markup. La fonction `clear_marks()` supprime les marqueurs.

La méthode `set_digits(digits)` définit la précision de l'échelle aux caractères `digits`.

# Références API

Dans cet exemple, les éléments suivants sont utilisés :

GtkScale

GtkAdjustment

Standard Enumerations