⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ OptionMenu
Tutoriel de tkinter.OptionMenu ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ OptionMenu
Tutoriel de tkinter.OptionMenu ( )
DESCRIPTION.
Créer une nouvelle liste déroulante de choix (widget : tkinter.OptionMenu ( )).
SYNTAXE.
BOX_Liste = tkinter.OptionMenu ( parent , variable , *valeurs , command = fonction )
BOX_Liste = ⇨ affectation de l'instance du controle [ optionnel ]
tkinter.OptionMenu ( ) ⇨ création d'une instance de tkinter.OptionMenu ( ) [ OBLIGATOIRE ]
parent ⇨ conteneur de l'instance de tkinter.OptionMenu ( ) [ OBLIGATOIRE ]
variable ⇨ variable de controle [ OBLIGATOIRE ]
*valeurs ⇨ collection de valeurs-options [ OBLIGATOIRE ]
command = fonction ⇨ fonction à exécuter après un choix [ optionnel ]
REMARQUES.
La classe tkinter.OptionMenu ( ) est une classe enfant héritant des caractéristiques de la classe tkinter.Menubutton ( ). Les controles créés avec le constructeur tkinter.OptionMenu ( ) sont une simplification d'une association d'un bouton de menu et d'un menu déroulant.
Les listes déroulantes de choix ont une initialisation différente des autres controles du module tkinter. Il faut obligatoirement et dans cette ordre :
- indiquer le conteneur de la liste déroulante de choix, le conteneur doit être existant et valide ;
- indiquer la variable de controle qui lui est associée, cette variable doit être existante et valide ;
- donner toutes les valeurs que pourra prendre la variable de controle ;
- éventuellement associer une fonction à exécuter après avoir effectué un choix parmi les options ;
- aucune autre caractéristique ne doit être faite dans la définition du controle.
parent peut être n'importe quel controle conteneur : fenêtre, cadre, cadre nommé, panneau conteneur, ..., à la condition qu'il soit valide et déjà créé.
variable peut être n'importe quelle variable de controle à la condition qu'elle soit valide et déjà créée. variable devra, obligatoirement, être du même type que celles des valeurs proposées par les choix de la liste :
- tkinter.BooleanVar ( ), pour des valeurs de type bool ( ) ;
- tkinter.IntVar ( ), pour des valeurs de type int ( ) ;
- tkinter.DoubleVar ( ), pour des valeurs de type float ( ) ;
- tkinter.StringVar ( ), pour des valeurs de type str ( ).
Quand l'utilisateur clique sur l'un des choix de la liste déroulante, cette valeur est affectée à variable, et le bouton de la liste déroulante reçoit donc comme étiquette cette même valeur.
*valeurs peut être :
- une suite de bool ( ), de int ( ), de float ( ) ou de str ( ) ;
- un ou une suite objets-collection de type valide tel que : list ( ) ou tuple ( ) ;
- une suite de valeurs et d'objets-collection.
Si des types différents de valeurs sont présentes dans *valeurs, il faudra s'assurer qu'elles sont toutes acceptables par le type de variable. Après création, il ne sera plus possible de modifier le nombre et les valeurs des choix, mais la méthode variable.set ( ) permettra d'en ajouter temporairement une, mais sans la placer dans la liste des choix initiale.
Si command = fonction est présent, alors :
- fonction doit être une expression représentant une méthode, ou fonction, valide à exécuter ;
- la valeur affectée à variable lui est passée en paramètre, il faut donc le prévoir dans la définition de fonction.
Rappel : à l'exception de command, aucun attribut ne doit apparaitre lors de la création d'une liste déroulante de choix. Les caractéristiques du controle pourront être définis ou modifiés après son initialisation avec :
- la méthode BOX_Liste.config ( attribut1 = valeur , ... , attributn = valeur ) ;
- la méthode BOX_Liste.configure ( attribut1 = valeur , ... , attributn = valeur ) ;
- BOX_Liste [ "attribut" ] = valeur.
A noter aussi, qu'héritant de la classe tkinter.Menubutton ( ), les listes déroulantes de choix possèdent les attribut menu, text et textvariable, mais ils sont ignorés sans toutefois lever d'exception par Python.
Les objets permanents de type tkinter.Menubutton ( ) sont identifiés dans le site par : BOX_.
Voir les conventions sur les variables utilisées dans ce site ...
EXEMPLES.
Création et utilisation avec les choix définis à la création.
import tkinter
def FNC_Choix ( event ) :
BOX_Choix [ "fg" ] = TKV_Choix.get ( )
LAB_Choix [ "bg" ] = TKV_Choix.get ( )
LAB_Choix [ "text" ] = TKV_Choix.get ( )
TKI_Principal = tkinter.Tk ( )
TKV_Choix = tkinter.StringVar ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BOX_Choix = tkinter.OptionMenu ( TKI_Principal , TKV_Choix , "black" , "red" , "lime" , "yellow" , "blue" , "magenta" , "aqua" , "white" , command = FNC_Choix )
LAB_Choix = tkinter.Label ( TKI_Principal )
TKV_Choix.set ( "orange" )
FNC_Choix ( None )
BUT_Quitter.pack ( )
LAB_Choix.pack ( )
BOX_Choix.pack ( )
TKI_Principal.mainloop ( )
Création et utilisation avec les choix définis dans un objet list ( ). A Noter la présence, indispensable, d'un astérisque (*) devant le nom de l'objet collection. Il est possible de préciser plusieurs objets collections en précédant chacun par un astérisque et en les séparant par une virgule (*collection1 , ... , *collectionn).
import tkinter
LST_Commun = [ "black" , "red" , "lime" , "yellow" , "blue" , "magenta" , "aqua" , "white" ]
LST_Encre = [ "grey" , "sylver" , "teal" , "Quitter" ]
LST_Fond = [ "green" , "olive" , "navy" , "Quitter" ]
def FNC_Choix ( event ) :
if event == "Quitter" :
TKI_Principal.destroy ( )
return
BOX_Fond [ "fg" ] = TKV_Fond.get ( )
BOX_Fond [ "bg" ] = TKV_Encre.get ( )
BOX_Fond [ "activeforeground" ] = TKV_Encre.get ( )
BOX_Fond [ "activebackground" ] = TKV_Fond.get ( )
BOX_Encre [ "fg" ] = TKV_Encre.get ( )
BOX_Encre [ "bg" ] = TKV_Fond.get ( )
BOX_Encre [ "activeforeground" ] = TKV_Fond.get ( )
BOX_Encre [ "activebackground" ] = TKV_Encre.get ( )
TKI_Principal = tkinter.Tk ( )
TKV_Fond = tkinter.StringVar ( )
TKV_Encre = tkinter.StringVar ( )
BOX_Fond = tkinter.OptionMenu ( TKI_Principal , TKV_Fond , *LST_Commun , *LST_Encre , command = FNC_Choix )
BOX_Encre = tkinter.OptionMenu ( TKI_Principal , TKV_Encre , *LST_Commun , *LST_Fond , command = FNC_Choix )
BOX_Encre.pack ( side = "left" )
BOX_Fond.pack ( side = "right" )
TKV_Fond.set ( "cyan" )
TKV_Encre.set ( "blue" )
FNC_Choix ( None )
TKI_Principal.mainloop ( )
Création et utilisation avec des choix définis à la création et dans un objet tuple ( ). Dans ce cas, les objets collection seront toujours placé après les choix définis à la création.
import tkinter
TPL_Choix = ( "black" , "red" , "green" , "yellow" , "blue" , "magenta" , "cyan" , "white" )
def FNC_Choix ( Q ) :
BOX_Fond [ "fg" ] = TKV_Fond.get ( )
BOX_Fond [ "bg" ] = TKV_Encre.get ( )
BOX_Encre [ "fg" ] = TKV_Encre.get ( )
BOX_Encre [ "bg" ] = TKV_Fond.get ( )
TKI_Principal = tkinter.Tk ( )
TKV_Fond = tkinter.StringVar ( )
TKV_Encre = tkinter.StringVar ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BOX_Fond = tkinter.OptionMenu ( TKI_Principal , TKV_Fond , "tomato" , "gold" , "silver" , *TPL_Choix , command = FNC_Choix )
BOX_Encre = tkinter.OptionMenu ( TKI_Principal , TKV_Encre , "orange" , "purple" , "beige" , *TPL_Choix , command = FNC_Choix )
BOX_Fond [ "justify" ] = "left"
BOX_Fond [ "anchor" ] = "w"
BOX_Fond [ "relief" ] = "ridge"
BOX_Fond [ "bd" ] = 7
BOX_Fond [ "height" ] = 2
BOX_Fond [ "width" ] = 10
BOX_Encre [ "justify" ] = "right"
BOX_Encre [ "anchor" ] = "e"
BOX_Encre [ "relief" ] = "groove"
BOX_Encre [ "bd" ] = 3
BOX_Encre [ "height" ] = 2
BOX_Encre [ "width" ] = 10
BUT_Quitter.pack ( side = "bottom" , fill = "both" )
BOX_Encre.pack ( side = "left" )
BOX_Fond.pack ( side = "right" )
FNC_Choix ( None )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de