Widget Button

Fenêtre - Widgets

Un bouton est associé à une fonction (fréquemment nommée "callback" dans les tutoriels, forums…).
Syntaxe du widget Button : nom_variable = ttk.Button(cible, text=chaîne, command=callback).
Noter l'absence de parenthèses après le nom de la fonction : command=callback et non pas command=callback(). Dans le cas contraire, la fonction est appelée dès la création du bouton, l'action est donc déclenchée instantanément…
Il est bien sûr possible d'associer une fonction quelconque à un bouton.

Il est parfois indispensable (cf. "Evénements" dans la suite de ce tutoriel) de transmettre un paramètre au moment de l'appel de la fonction, on contourne donc la restriction précédente en utilisant une fonction lambda définie à la volée.
Button(cible, text=chaîne, command=lambda x : fonction(x)).
On peut bien sûr utiliser plusieurs paramètres avec cette méthode.

Il est possible de désativer ou d'activer un bouton : nom_bouton.state(['disabled']) ou nom_bouton.state(['!disabled']).

Créer l'interface suivante.

Fenêtre - Widgets

Code


Commentaires

Noter, comme pour tout widget :

  • la syntaxe en deux temps (création et stockage du widget dans une variable puis placement) ou la syntaxe en une instruction (création-placement).
  • Les attributs fill et expand permettent des réglage supplémentaires (redimensionner la fenêtre pour constater leurs effets).

Noter l'utilisation de fonctions lambda dans le but de transmettre un paramètre : command=lambda x=-10 : bougeDisque(x).
Remarque : il aurait été possible de créer deux fonctions bougeGauche() et bougeDroite(), sans paramètres et d'utiliser command=bougeGauche pour le premier bouton.

Il est possible de placer des symboles sur les boutons en utilisant le codage UTF-8 (cf. ce lien, liquer sur un symbole pour voir le codage Python). Par exemple, le symbole ⇦ est codé en Python par u"\u21E6" ou "\u21E6" : text=u"\u21E6" est utilisable.
Pour information, le "u" signifie "codage utf-8", l'antislash ou backslash "\" est un caractère d'échappement qui signale à l'interpréteur Python que le caractère qui suit ne doit pas être pris en compte : le codage du caractère est 21E6 en hexadécimal (base 16).

Utiliser des ressources web