⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Spinbox
tkinter.Spinbox ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Spinbox
tkinter.Spinbox ( )
DESCRIPTION.
Créer un nouveau controle de type sélecteur rotatif ou boite à choix (widget : tkinter.Spinbox ( )).
SYNTAXE.
SPI_Choix = tkinter.Spinbox ( parent , attribut1 = valeur , ... , attributn = valeur )
SPI_Choix = ⇨ affectation de l'instance du controle [ optionnel ]
tkinter.Spinbox ( ) ⇨ création d'une instance de tkinter.Spinbox ( ) [ OBLIGATOIRE ]
parent ⇨ conteneur de l'instance de tkinter.Spinbox ( ) [ OBLIGATOIRE ]
attribut = valeur ⇨ attribut à modifier avec sa nouvelle valeur [ optionnel ]
REMARQUES.
Les boites à choix, ou sélecteur rotatif, permet de présenter à l'utilisateur une certaine quantité d'options valides, qu'il pourra faire défiler à l'aide de flèches fléché de sélection. L'utilisateur pourra choisir l'une de ces valeur ou en proposer une autre en saisissant un texte à l'aide du clavier.
Les options des boites à choix peuvent être une liste de valeurs uniquement numériques : int ( ) ou float ( ) ou une suite de données alphanumériques : str ( ). Dans le second cas, si des valeurs numériques sont présentes, elles devront l'être sous la forme de str ( ) et converties par le script en bool ( ), int ( ) ou float ( ) car tous les options d'une boite à choix doivent être du même type de valeur, numérique ou alphanumérique.
Les objets permanents de type tkinter.Spinbox ( ) sont identifiés dans le site par : SPI_.
Voir les conventions sur les variables utilisées dans ce site ...
BOITE A CHOIX NUMERIQUES.
Les objets créés avec la classe tkinter.Spinbox ( ) disposent d'attributs permettant de générer rapidement une suite numérique pour en proposer les valeurs à l'utilisateur. from_ définit la première valeur de la suite et to la dernière. Pour définir une suite numérique seul l'attribut to est requit, la valeur par défaut de l'attribut from_ sera de 0 s'il il est absent. increment donne l'écart entre deux valeurs de la suite, qui est de 1 par défaut, et format force le gabarit de l'affichage des nombres.
Si l'attribut values est utilisée, les attributs from_, to, increment et format seront ignorés même s'il sont placés après.
import tkinter
TKI_Principal = tkinter.Tk ( )
tkinter.Spinbox ( TKI_Principal , from_ = -10 , to = 25 , increment = .25 , format = "%2.3f" ).pack ( fill = "both" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).pack ( fill = "both" )
TKI_Principal.mainloop ( )
BOITE A CHOIX ALPHANUMERIQUES.
Les options alphanumériques données par une boite à choix doivent être passées avec l'attribut values. Elles doivent être présentées dans un objet collection valide. Cet objet collection : list ( ) ou tuple ( ) peut être affecté directement après le nom de l'attribut ou faire référence à une instance de l'objet collection créé précédemment.
La présence de l'attribut values annule toutes suites numériques qui seraient créées avec les attributs from_, to, increment et format même s'il sont placés après.
import tkinter
LST_Villes = [ "Montréal" , "Quebec" , "Sherbrooke" , "Gatineau" , "Levis" , "Trois-Rivières" ]
TPL_Series = [ "Ram Dam" , "km/h" , "Catherine" , "Radio Enfer" , "Watatatow" , "La Petite Vie" ]
TKI_Principal = tkinter.Tk ( )
tkinter.Spinbox ( TKI_Principal , values = ( "red" , "lime" , "blue" , "yellow" , "magenta" , "aqua" , "black" , "white" ) ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = [ "Quebec" , "France" , "Belgique" , "Suisse" , "Algérie" ] ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = "Python est puissant et facile à apprendre." ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = tuple ( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ) ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = list ( "0123456789" ) ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = LST_Villes ).pack ( )
tkinter.Spinbox ( TKI_Principal , values = TPL_Series ).pack ( )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).pack ( fill = "both" )
TKI_Principal.mainloop ( )
BOITE A CHOIX AVEC SAISIE DE L'UTILISATEUR.
L'utilisateur pourra, s'il le désire, saisir une valeur dans un boite à choix. Pour cela il devra sélectionner la totalité du texte affiché dans la boite à choix et l'effacer, puis entrer un nouveau texte dans la zone de saisie. Pour éviter cette manipulation à l'utilisateur, le script pourra prévoir différentes stratégie en proposant une chaine de caractères vide "" ou en programmant un gestionnaire d'événement lorsque l'utilisateur clique dans la zone de saisie.
import tkinter
def FNC_Saisie ( event ) :
if SPI_Couleurs.identify ( event.x , event.y ) != "entry" : return
SPI_Couleurs.delete ( 0 , "end" )
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
SPI_Couleurs = tkinter.Spinbox ( TKI_Principal , values = ( "red" , "lime" , "blue" , "yellow" ) )
SPI_Couleurs.pack ( )
BUT_Quitter.pack ( fill = "both" )
SPI_Couleurs.bind ( "<ButtonRelease>" , FNC_Saisie )
TKI_Principal.mainloop ( )
CONTROLE DE VALIDITÉ DE LA SAISIE.
Bien souvent, les valeurs passées au programme par l'intermédiaire d'une boite à choix doivent être à un certain format ou dans une plage définie. les controles créés avec la classe tkinter.Spinbox ( ) permettent d'appeler une fonction pour controler et valider chaque modification du contenu, afin de s'assurer que le programme pourra traiter convenablement les données fournies par l'utilisateur, grâce à ses attributs validate, validatecommand et invalidcommand.
1. Définir une fonction de controle et de validation, grace à la instruction def comme d'habitude. Cette fonction pourra effectuer des traitements à la volée, en fonction du contenu saisie, mais doit avoir comme but principal de retourner True si le contenu du champ est valide, en regard des attentes de script, ou False dans le cas contraire. Si False est retourné, la modification du champ de saisie ne sera pas autorisée. Si la fonction de validation ne retourne ni True ni False, une exception sera levée par Python.
2. Construire un emballage Tcl autour de la fonction de validation en utilisant la méthode tkinter.register ( ).
3. Associer l'emballage Tcl à la boite à choix en affectant l'emballage Tcl à l'attribut validatecommand. et les arguments à passer à la fonction de validation, qui devra prévoir dans sa définition de la recevoir. Les arguments possible sont
- "%d", le Code d'action ;
- 0, tentative de suppression ;
- 1, pour une tentative d'insertion ;
- -1, modification du focus ou de la variable associée à textvariable du champs de saisie ;
- "%i", l'utilisateur tente de supprimer ou d'insérer du texte ;
- "%P", la valeur qu'aurais pris le champ de saisie si la modification avez réussie ;
- "%s", la valeur du champs de saisie avant la modification ;
- "%S", la valeur du texte inséré ou supprimé, si l'appel et du à cette modification ;
- "%v", l'événement surveillé par de l'attribut validate ;
- %V", la circonstance de l'appel si la variable de controle liée au champ de saisie a été modifié ;
- "%W", identification du champs de saisie.
4. Précisez l'événement qui déclenchera l'appel de la fonction de validation grace à l'attribut validate de la boite à choix. Les événements possibles sont :
- "all", tous les événement ci dessous ;
- "focus", le champ de saisie à le focus ;
- "focusin", le champ de saisie obtient le focus ;
- "focusout", le champ de saisie perd le focus;
- "key", une touche du clavier a été enfoncé ;
- "none", annule la surveillance de la saisie.
Si la fonction de validation retourne la valeur False, c'est à dire si la modification de la boite à choix ne correspond pas aux critères requis par le code, une fonction de rappel peut être invoquée, automatiquement, en l'associant à l'attribut invalidcommand. Cette fonction pourra par exemple : donner un modèle de saisie correcte, une recommandation, modifier la valeur de la variable de controle associé à textvariable, afficher un message dans une fenêtre surgissant, remplacer le contenu du champ de saisie par une valeur par défaut pour la suite de traitement, ignorer la saisie, ...
Voir la méthode tkinter.register ( ) et les attributs validate, validatecommand et invalidcommand. des boite à choix pour plus de détails.
import tkinter
def FNC_Test ( Q ) :
if Q.isdigit ( ) :
LAB_Reponce [ "text" ] = "Ok ..."
return True
else :
return False
def FNC_Message ( ) :
LAB_Reponce [ "text" ] = "ATTENTION !\nMauvaise\nsaisie !"
TKI_Principal = tkinter.Tk ( )
REG_Valide = TKI_Principal.register ( FNC_Test )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
SPI_Choix = tkinter.Spinbox ( TKI_Principal , validate = "key" , validatecommand = ( REG_Valide , "%P" ) , invalidcommand = FNC_Message )
LAB_Reponce = tkinter.Label ( TKI_Principal )
LAB_Reponce.pack ( )
SPI_Choix.pack ( )
BUT_Quitter.pack ( )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de