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 :

Encadrer un menu


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Encadrer un menu
    Bonjour,

    Je débute en Python et apres avoir chercher inlassablement sur le net j'en viens à vous demander de l'aide. Je souhaiterai mettre une bordure à mon menu principal...
    Voici un code exemple tres simple:

    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
     
    from Tkinter import * 
     
    class MenuBar (Frame):
    	def __init__(self, boss):
    		Frame.__init__(self,bd=2,relief=GROOVE,bg='blue',width=300,height=50)
     
    		self.boss = boss
     
    		self.menu1 = Menu(self)
    		self.sous_menu1 = Menu(self.menu1, tearoff=0)
    		self.menu1.add_cascade(label=" Menu ", menu = self.sous_menu1)
    		self.sous_menu1.add_command(label = "Menu principal")
     
    		self.sous_menu2 = Menu(self.menu1, tearoff=0)
    		self.menu1.add_cascade(label=" Informations ", menu = self.sous_menu2)
    		self.sous_menu2.add_command(label = "Aide")
    		self.sous_menu2.add_command(label = "Version")
     
    		self.boss.config(menu = self.menu1)
     
    if __name__ == '__main__':
     
        root=Tk()
        root.geometry("300x300")
        MenuBar(root)
        root.mainloop()
    Si je fais hériter ma classe "MenuBar" de Frame, ne puis je pas profiter des possibilités de configuration de celle ci ?, la bordure ne s'affiche pas. De mettre les paramètres dans le constructeur "Frame.__init__ " n'y change rien.Quelqu'un peut il me donner une solution ?
    Mon but et de me rapprocher le plus possible de l'esthétique d'un menu professionnel comme celui de Internet Explorer par exemple.

    Merci pour vos réponses !
    Bonne journée

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Qu'appelles-tu menu principal ? Est-ce la barre des menus ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Frame.__init__(self,bd=2,relief=GROOVE,bg='blue',width=300,height=50)
    Tu ne vois rien car le widget Frame ne sera jamais affiché : il doit être positionné après sa création pour être visible à l'écran (comme c'est le cas pour la quasi-totalité des widgets Tkinter, Menu est une exception).
    Utilise grid ou pack, etc...
    Soit tu positionnes la Frame à la fin du constructeur de ta classe MenuBar :
    self.pack()
    Soit tu le positionnes au niveau du code appelant :
    MenuBar(root).pack()

    Mais pourquoi vouloir dériver la classe Frame ? Menu est déjà un conteneur, inutile de l'empaqueter à son tour dans une Frame.
    Ce code est plus concis, est-ce que c'est que tu cherches à obtenir ?
    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
    from Tkinter import * 
     
    class MenuBar(Menu):
    	def __init__(self, boss):
    		Menu.__init__(self, bd=2, relief=GROOVE, bg='blue')
     
    		self.boss = boss
     
    		self.sous_menu1 = Menu(self, tearoff=0)
    		self.add_cascade(label=" Menu ", menu = self.sous_menu1)
    		self.sous_menu1.add_command(label = "Menu principal")
     
    		self.sous_menu2 = Menu(self, tearoff=0)
    		self.add_cascade(label=" Informations ", menu = self.sous_menu2)
    		self.sous_menu2.add_command(label = "Aide")
    		self.sous_menu2.add_command(label = "Version")
     
    		self.boss.config(menu=self)
     
     
    if __name__ == '__main__':
     
        root=Tk()
        root.geometry("300x300")
        MenuBar(root)
        root.mainloop()
    Ah, et je n'ai pas compris la raison du « width=300, height=50 » dans le constructeur de la Frame : en effet la taille de la barre des menus s'adapte directement à son contenu.
    Il en va de même pour les Frames, même si tu forces une dimension à la construction, une fois des widgets enfant placés dans la Frame, les dimensions de celle-ci vont s'adapter automatiquement, que ce soit en plus grand ou en plus petit.
    <3 Debian
    [ C | C++ | PHP | Python ]

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    dsl de repondre si tard mais je n'avais plus le net :s

    Oui se que j'appelle menu principal est la toolbar classique qu'on retrouve dans quasi tous les softs. Par exemple celle de Internet Explorer qui commence par Ficher, Edition, Affichage ..etc

    Merci pour ta reponse et ton exemple.
    Les parametres du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Menu.__init__(self, bd=2, relief=GROOVE, bg='blue')
    sont ils pri en compte dans ton affichage ? car chez moi mon menu n'a pas de font bleu et pas de cadre. Est se du à mon OS (windows 2000) ?

    merci pour toutes tes precisions, je pensais qu'il était conseillé de deriver toutes les classes de Frame pour les rendre modulaires et reutilisables.

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. Menu Horizontal et vertical encadrés
    Par vg-matrix dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 08/10/2007, 08h20
  3. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  4. Inserer Un Menu dans un autre en execution
    Par apt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 11h22
  5. Menu en GL
    Par Kaïn dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/05/2002, 11h58

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