Outils pour utilisateurs

Outils du site


barre_de_menu

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Dernière révision Les deux révisions suivantes
barre_de_menu [2008/04/27 07:24]
tyrtamos
barre_de_menu [2008/07/05 17:20]
tyrtamos
Ligne 432: Ligne 432:
 fen.mainloop() fen.mainloop()
 </​code>​ </​code>​
 +
 +===== Faire en sorte que les codes clavier soient calés à droite =====
 +
 +On veut qu'un menu se présente un peu comme cela (exemple des items d'un menu de type "​Fichier"​):​
 +
 +  Ouvrir ​      ​Ctrl+O
 +  Fermer ​      ​Ctrl+W
 +  Enregistrer ​ Ctrl+S
 +  Quitter ​      Alt+X
 +
 +C'est à dire que les raccourcis commandes claviers sont calés automatiquement à droite.
 +
 +Le problème, c'est que dans une police de caractères type "​arial",​ les caractères n'ont pas tous la même largeur en pixels à l'​écran.
 +
 +Alors, on va utiliser une des fonctions du module tkFont: "​measure(texte)",​ qui mesure en pixel la longueur d'un texte. Et on ajustera à la fin avec des espaces.
 +
 +La fonction qui ajuste l'item s'​appelle ici: ajusteitems().
 +
 +Voilà le code (il est auto-documenté):​
 +
 +<code python>
 +#​!/​usr/​bin/​python
 +# -*- coding: utf-8 -*-
 + 
 +import Tkinter, tkFont
 + 
 +class Application(Tkinter.Frame):​
 + 
 +    def __init__(self,​ master=None):​
 +        Tkinter.Frame.__init__(self,​ master, background="​grey"​)
 + 
 +        self.policemenu=tkFont.Font(self,​ size=9, family='​Arial'​)
 + 
 +        # creation de la barre de menu:
 +        self.barremenu = Tkinter.Menu(self.master)
 +
 +        # représentation des items du menu "​Fichier"​ sous forme de liste:
 +        self.itemmenu=[
 +                  ["​Ouvrir",​ "​Ctrl+O"​],​
 +                  ["​Fermer",​ "​Ctrl+W"​],​
 +                  ["​Enregistrer",​ "​Ctrl+S"​],​
 +                  ["​Quitter",​ "​Alt+X"​]
 +                      ]
 +        items=self.ajusteitems(self.itemmenu)
 +        ​
 +        # creation du menu "​Fichier"​
 +        self.fichier = Tkinter.Menu(self.barremenu,​ tearoff=0, font=self.policemenu)
 +        self.barremenu.add_cascade(label="​Fichier",​menu=self.fichier)
 +        self.fichier.add_command(label=items[0],​ command=self.ouvrir)
 +        self.fichier.add_command(label=items[1],​ command=self.fermer)
 +        self.fichier.add_command(label=items[2],​ command=self.enregistrer)
 +        self.fichier.add_separator()
 +        self.fichier.add_command(label=items[3],​ command=self.quitter)
 + 
 +        # représentation des items du menu "​Aide"​ sous forme de liste:
 +        self.itemmenu=[
 +                  ["​Manuel",​ "​F1"​],​
 +                  ["A propos",​ ""​]
 +                      ]
 +        items=self.ajusteitems(self.itemmenu)
 +        ​
 +          # creation du menu "​Aide"​
 +        self.aide = Tkinter.Menu(self.barremenu,​ tearoff=0, font=self.policemenu)
 +        self.barremenu.add_cascade(label="​Aide",​menu=self.aide)
 +        self.aide.add_command(label=items[0],​ command = self.manuel)
 +        self.aide.add_command(label=items[1],​ command = self.apropos)
 + 
 +        # afficher le menu
 +        self.master.config(menu=self.barremenu)
 + 
 +    def ajusteitems(self,​ itemmenu):
 +        # Calcul de la longueur maxi en pixels des items du menu fichier:
 +        lg=0
 +        for i1, i2 in itemmenu:
 +            lg1=self.policemenu.measure(i1)
 +            lg2=self.policemenu.measure(i2)
 +            if lg1+lg2>​lg:​
 +                lg=lg1+lg2
 +        esp=self.policemenu.measure("​ "​) ​ # = nb de pixels d'un espace
 +        lg=lg+2*esp ​ # ajout de 2 espaces
 +
 +        # Ajustement des espaces pour que les commandes clavier soient calées à droite
 +        lch=[]
 +        for i1, i2 in self.itemmenu:​
 +            lg1=self.policemenu.measure(i1)
 +            lg2=self.policemenu.measure(i2)
 +            n=(lg-lg1-lg2)/​esp
 +            lch.append(i1 + " "*n + i2)
 +        return lch
 +
 +    def ouvrir(self):​ print "​Ouvrir"​
 +    def fermer(self):​ print "​fermer"​
 +    def enregistrer(self):​ print "​enregistrer"​
 +    def quitter(self):​ self.master.destroy()
 +    def manuel(self):​ print "​manuel"​
 +    def apropos(self):​ print "​apropos"​
 + 
 +#############################################################################​
 +fen=Tkinter.Tk()
 +fen.title("​Ma fenêtre"​)
 +app=Application(fen)
 +fen.geometry("​%dx%d%+d%+d"​ % (300,​300,​100,​100))
 +fen.mainloop()
 +</​code>​
 +
 +
 +
 +
  
 <​html>​ <​html>​
barre_de_menu.txt · Dernière modification: 2008/07/08 07:40 par tyrtamos