IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Comment desactiver la commande d'une barre de menu ?


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Par défaut Comment desactiver la commande d'une barre de menu ?
    Bonjour,
    J'ai créer un menu pour mon programme mais je n'arrive pas a trouver la comment activer ou desactiver une commande de ma barre de menu.
    Je vous poste le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class BarreMenu(Frame):
        """Barre de menu avec options typiques"""
        def __init__(self, boss=None):
            "Initialisation du menu"
            Frame.__init__(self, borderwidth =2)
            # Création de la barre de menu:
            barreMenu = Menu(boss)
            # Menu Fichier
            fichier = Menu(barreMenu, tearoff=0)
            barreMenu.add_cascade(label="Fichier", menu=fichier)
            self.nouv = fichier.add_command(label="Nouveau",
                                            command=boss.nouveau)
            self.com = fichier.add_command(label="Commencer", state=DISABLED,
                                  command=boss.commencer)
            fichier.add_command(label="Scores", command=boss.scores)
            fichier.add_command(label="Quitter", command=self.master.destroy)
            # Menu A Propos
            aPropos = Menu(barreMenu, tearoff=0)
            barreMenu.add_cascade(label="A Propos", menu=aPropos)
            aPropos.add_command(label="Editeur", command=None) # A Attribuer
            # afficher le menu
            self.master.config(menu=barreMenu)
     
     
        def actNouv(self): # A Faire !
            "Active le bouton Nouveau"
            pass
     
        def desacNouv(self): # A Faire !
            "Desactive le bouton Nouveau"
            pass
     
        def actCom(self): # A Faire !
            "Active le bouton Commencer"
            pass
     
        def desactCom(self): # A Faire !
            "Désactive le bouton Commencer"
            pass
    Je voudrais que les 4 methodes que j'ai créer puisse activer et désactiver les commandes 'Nouveau' et 'Commencer' mais même apres une recherche et plusieurs essais, je n'y suis pas arrivé !
    J'ai essayé:
    self.nouv.configure(state=DISABLED)
    self.nouv.config(state=DISABLED)
    self.nouv.itemconfig(state=DISABLED)
    fichier.itemconfig(self.nouv, state=DISABLED)

    Quelqu'un aurai une idée svp ?

  2. #2
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    c'est le code configuration qui bug il faut utiliser .entryconfigure(index, option=valeur) ou .entryconfig(index, option=valeur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class BarreMenu(Frame):
        """Barre de menu avec options typiques"""
        def __init__(self, boss=None):
            "Initialisation du menu"
            Frame.__init__(self, borderwidth =2)
            # Création de la barre de menu:
            barreMenu = Menu(boss)
            # Menu Fichier
     
            fichier = Menu(barreMenu, tearoff=0)
            self.nouv = fichier.add_command(label="Nouveau",
                                            command=boss.nouveau)
            self.com = fichier.add_command(label="Commencer", state=DISABLED,
                                  command=boss.commencer)
            fichier.add_command(label="Scores", command=boss.scores)
            fichier.add_command(label="Quitter", command=self.master.destroy)
            # Menu A Propos
            aPropos = Menu(barreMenu, tearoff=0)
            barreMenu.add_cascade(label="A Propos", menu=aPropos)
            aPropos.add_command(label="Editeur", command=None) # A Attribuer
            # afficher le menu
            self.master.config(menu=barreMenu)
     
     
        def actNouv(self): # A Faire !
            "Active le bouton Nouveau"
            fichier.entryconfgure(1, state=NORMAL)
     
        def desacNouv(self): # A Faire !
            "Desactive le bouton Nouveau"
             fichier.entryconfigure(1, state=DISABLED)
     
        def actCom(self): # A Faire !
            "Active le bouton Commencer"
             fichier.entryconfigure(2, state=NORMAL)
     
        def desactCom(self): # A Faire !
            "Désactive le bouton Commencer"
             fichier.entryconfigure(2, state=DISABLED)
    Conseil: C'est la mauvaise technique de construction de menu sans vouloir t'offenser, j'ai fait la meme erreur...
    il faut utiliser des Menubutton pour construire ton menu qui eux peuvent etre DISABLED.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Par défaut
    Merci pour ta réponse, grace a toi, j'ai pu résoudre mon problème !
    voici mon code final !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class BarreMenu(Frame):
        """Barre de menu avec options typiques"""
        def __init__(self, boss=None, ** Arguments):
            "Initialisation du menu"
            Frame.__init__(self, borderwidth =2, ** Arguments)
            # Création de la barre de menu:
            barreMenu = Menu(boss)
            # Menu Fichier
            self.fichier = Menu(barreMenu, tearoff=0)
            barreMenu.add_cascade(label="Fichier", menu=self.fichier)
            self.fichier.add_command(label="Nouveau",
                                            command=boss.nouveau)
            self.fichier.add_command(label="Commencer", state=DISABLED,
                                  command=boss.commencer)
            self.fichier.add_command(label="Scores", command=boss.scores)
            self.fichier.add_command(label="Quitter", command=self.master.destroy)
            # Menu A Propos
            self.aPropos = Menu(barreMenu, tearoff=0)
            barreMenu.add_cascade(label="A Propos", menu=self.aPropos)
            self.aPropos.add_command(label="Editeur", command=None)
            # afficher le menu
            self.master.config(menu=barreMenu)
     
     
        def actNouv(self): # A Faire !
            "Active le bouton Nouveau"
            self.fichier.entryconfigure(0, state=NORMAL)
     
        def desacNouv(self): # A Faire !
            "Desactive le bouton Nouveau"
            self.fichier.entryconfigure(0, state=DISABLED)
     
        def actCom(self): # A Faire !
            "Active le bouton Commencer"
            self.fichier.entryconfigure(1, state=NORMAL)
     
        def desactCom(self): # A Faire !
            "Désactive le bouton Commencer"
            self.fichier.entryconfigure(1, state=DISABLED)
    Loin de la au contraire, les critiques m'aident a avancer et a améliorer ma façon de coder, et je t'en remercie, par contre, je ne suis pas sur de comprendre ce qu'est un "MenuButton" est ce que c'est cette facon de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    from Tkinter import *
    root = Tk()
     
    def chtitre(choix):    
        root.title(choix)
     
    def chcolor(choix):    
        root.tk_setPalette(choix)
     
    mb1=Menubutton(root,text="Fichier",relief="raised")
    mb1.m=Menu(mb1,tearoff=0)
    mb1.m.add_command(label="Quitter", command=root.quit)
    mb1.config(menu=mb1.m)
    mb1.pack(side="left",pady=4,padx=4)
     
    mb2=Menubutton(root,text="Cascade",relief="raised")
    cascad=Menu(mb2,tearoff=0)
    mb2.config(menu=cascad)
     
    titre=Menu(cascad,tearoff=0)
    cascad.add_cascade(label="titre",menu=titre)
    titre.add_command(label="menu demo", command=lambda  : chtitre('menu demo'))
    titre.add_command(label="Test", command=lambda  : chtitre('test'))
     
    color=Menu(cascad)
    cascad.add_cascade(label="Couleur",menu=color)
    color.add_command(label="bleu", command=lambda : chcolor('blue'))
    color.add_command(label="rouge", command=lambda : chcolor('red'))
     
    mb2.pack(pady=4)
     
    root.mainloop()
    Merci pour ton aide !

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Un Menubutton est le seule bouton que tu vois dans le menu et quand tu appuis sur celui-çi le menu se déroule.J'ai dit que c'était la mauvaise technique car j'ai developper un menu comme le tiens mais le problème est que cette façon de faire est peu pratique car sans les Menubutton tu peut pas placer ton menu ou tu veux: problème de gestionnaire de géometrie alors que les Menubutton accepte les differents directeurs de géometrie(pack(), grid()...).
    Pour construire un menu avec Menubutton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from Tkinter import *
     
    a=Tk()
    b=Menubutton(a, text='Menubutton')
    c=Menu(b)
    c.add_command(label='command')#tu peut ajouter ce que tu veux a ton Menubutton: cascade, Radiobutton ...
    b.configure(menu=c)
    a.mainloop()
    Il faut construire un Menubutton pour chaque partie du menu mais je trouve sa plus logique et pratique.

    Des liens vers de la doc sur Tkinter:
    http://www.pythonware.com/library/tk...tion/index.htm
    http://www.tkdocs.com/tutorial/
    http://www.freenetpages.co.uk/hp/alan.gauld/tutgui.htm

    Si tu est amateur de 3D, j'ai publier de nouveaux billet sur mon blog consacrer a la création graphique avec sketch up: http://3dcyberspace.unblog.fr/

Discussions similaires

  1. Comment desactivé un onclick sur une balise <a>
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/08/2006, 17h02
  2. [Access 2003]Comment personnalisé une barre de menu
    Par steeves5 dans le forum Access
    Réponses: 4
    Dernier message: 03/07/2006, 21h20
  3. Réponses: 2
    Dernier message: 08/06/2006, 11h09
  4. [MFC] activer une commande d'une barre de menu
    Par kabil.cpp dans le forum MFC
    Réponses: 4
    Dernier message: 05/05/2006, 10h25
  5. Comment faire une Barre de Menu?
    Par gamerome dans le forum OpenGL
    Réponses: 5
    Dernier message: 18/02/2005, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo