Tk facile - le widget spinbox

 

ulis, 2006-09-14.

Exercices : copiez-collez les exemples, exécutez-les puis modifiez-les. Durée : 30mn.


Premier script

  spinbox .s -from 0.0 -to 10.0 -increment 0.1 -format %2.1f
  grid .s

La commande spinbox crée un widget spinbox et une commande du nom du widget (ici .s). En créant le widget on peut aussi préciser la valeur des options du widget. Les options -from, -to et -increment indiquent que les valeurs vont de 0.0 à 10.0 par incrément de 0.1. L'option format indique que l'affichage se fait en format %f avec deux chiffres devant le point décimal et un chiffre derrière. La commande grid affiche le widget.


Choix dans une liste

On peut aussi choisir dans une liste :

  grid [spinbox .s -values {1T 2T 3T 4T}]

Comme la commande spinbox retourne le nom du widget, la commande grid peut l'utiliser. Le widget affiche les différentes valeurs de la liste.


Options standards

  spinbox .s -values {1T 2T 3T 4T} -command {change %s}
  grid .s
  .s configure -bg yellow \
    -font {Courier -16} -width 4
  proc change {value} { tk_messageBox -message $value }

L'opération configure permet de modifier l'aspect ou le comportement du widget à travers des options. L'option -bg est une option abrégée qui est synonyme de l'option -background qui contrôle la couleur du fond. L'option -font contrôle elle la police du texte. L'option -width indique la largeur du widget, en nombre de caractères. L'option '-commande définit un script qui sera exécuté à chaque fois qu'on changera la valeur avec les flèches. Le script peut contenir les paramètres suivants : %s représente la valeur actuelle, %W pour le nom du widget et %d pour la flèche utilisée (up : vers le haut, down : vers le bas).


Lecture seule

Il est possible de taper directement une nouvelle valeur dans le widget. Dans ce cas, le script de l'option -command N'EST PAS exécuté. Pour mieux contrôler ce qui se passe on peut mettre le widget dans l'état readonly. Dans ce cas, il n'est plus possible de taper sauvagement la valeur dans le widget. L'usage des flèches devient obligatoire pour changer la valeur. Ce qui a le double avantage d'avoir toujours une valeur valide et d'exécuter le script de l'option -command à chaque changement de valeur.

  spinbox .s -values {1T 2T 3T 4T} -command {change %s}
  grid .s
  .s configure -state readonly -width 4
  proc change {value} { tk_messageBox -message $value }

L'option state peut prendre les valeurs : normal, readonly et disabled. Dans l'état disabled le widget ne réagit pas.


Valeur du widget

On peut récupérer la valeur du widget dans le script de l'option -command avec le paramètre %s. On peut aussi utiliser l'opération get :

  set value [.s get]

Variable

Plutôt que d'interroger le widget pour connaître sa valeur, on peut demander que cette valeur soit stockée dans une variable globale. Il est alors possible de lire et écrire cette variable. En la lisant on récupère la valeur courante du widget. En l'écrivant, on modifie la valeur courante du widget. ATTENTION : il n'y a aucune vérification de validité dans ce cas.

  set ::value 1
  grid [spinbox .s -textvariable ::value]
  proc modify {} \
  { incr ::value; after 1000 modify }
  modify

L'option -textvariable reçoit le nom d'une variable globale. La procédure modify modifie la valeur de cette variable toutes les secondes.


Contrôle de la valeur

Il est possible de vérifier que la valeur tapée sauvagement dans le widget est correcte. Il faut pour cela utiliser les options -validate et -validatecommande. C'est très délicat. Le widget spinbox étant un type de widget entry, voir Tk facile - le widget entry.


Voir aussi


Discussion


Catégorie Cours | Catégorie Encyclopédie Tk