Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
barre_de_menu [2008/04/27 07:24] tyrtamos |
barre_de_menu [2008/07/08 07:40] (Version actuelle) tyrtamos |
||
---|---|---|---|
Ligne 432: | Ligne 432: | ||
fen.mainloop() | fen.mainloop() | ||
</ | </ | ||
+ | |||
+ | ===== 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 " | ||
+ | |||
+ | Ouvrir | ||
+ | Fermer | ||
+ | Enregistrer | ||
+ | Quitter | ||
+ | |||
+ | C'est à dire que les raccourcis commandes claviers sont alignés. | ||
+ | |||
+ | Le problème, c'est que dans une police de caractères type " | ||
+ | |||
+ | ==== Solution " | ||
+ | |||
+ | J'ai mis pas mal de temps à trouver cette option qui ne se trouve pas dans tous les manuels. | ||
+ | |||
+ | Au lieu de faire par exemple: | ||
+ | |||
+ | <code python> | ||
+ | self.edition.add_command(label=" | ||
+ | </ | ||
+ | |||
+ | On fait: | ||
+ | |||
+ | <code python> | ||
+ | self.edition.add_command(label=" | ||
+ | </ | ||
+ | |||
+ | Et les différents codes de commande clavier d'un même menu et cités par accelerator, | ||
+ | |||
+ | ==== Solution avec " | ||
+ | |||
+ | Je cite cette solution pour mémoire et parce que c'est un exemple d' | ||
+ | |||
+ | On va utiliser une des fonctions du module tkFont: " | ||
+ | |||
+ | L' | ||
+ | |||
+ | l' | ||
+ | |||
+ | La fonction qui ajuste l'item s' | ||
+ | |||
+ | Voilà le code (il est auto-documenté): | ||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | |||
+ | import Tkinter, tkFont | ||
+ | |||
+ | class Application(Tkinter.Frame): | ||
+ | |||
+ | def __init__(self, | ||
+ | Tkinter.Frame.__init__(self, | ||
+ | |||
+ | self.policemenu=tkFont.Font(self, | ||
+ | |||
+ | # creation de la barre de menu: | ||
+ | self.barremenu = Tkinter.Menu(self.master) | ||
+ | |||
+ | # représentation des items du menu " | ||
+ | self.itemmenu=[ | ||
+ | [" | ||
+ | [" | ||
+ | [" | ||
+ | [" | ||
+ | ] | ||
+ | items=self.ajusteitems(self.itemmenu) | ||
+ | | ||
+ | # creation du menu " | ||
+ | self.fichier = Tkinter.Menu(self.barremenu, | ||
+ | self.barremenu.add_cascade(label=" | ||
+ | self.fichier.add_command(label=items[0], | ||
+ | self.fichier.add_command(label=items[1], | ||
+ | self.fichier.add_command(label=items[2], | ||
+ | self.fichier.add_separator() | ||
+ | self.fichier.add_command(label=items[3], | ||
+ | |||
+ | # représentation des items du menu " | ||
+ | self.itemmenu=[ | ||
+ | [" | ||
+ | ["A propos", | ||
+ | ] | ||
+ | items=self.ajusteitems(self.itemmenu) | ||
+ | | ||
+ | # creation du menu " | ||
+ | self.aide = Tkinter.Menu(self.barremenu, | ||
+ | self.barremenu.add_cascade(label=" | ||
+ | self.aide.add_command(label=items[0], | ||
+ | self.aide.add_command(label=items[1], | ||
+ | |||
+ | # afficher le menu | ||
+ | self.master.config(menu=self.barremenu) | ||
+ | |||
+ | def ajusteitems(self, | ||
+ | # 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=lg1+lg2 | ||
+ | esp=self.policemenu.measure(" | ||
+ | lg=lg+2*esp | ||
+ | |||
+ | # 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)/ | ||
+ | lch.append(i1 + " "*n + i2) | ||
+ | return lch | ||
+ | |||
+ | def ouvrir(self): | ||
+ | def fermer(self): | ||
+ | def enregistrer(self): | ||
+ | def quitter(self): | ||
+ | def manuel(self): | ||
+ | def apropos(self): | ||
+ | |||
+ | ############################################################################# | ||
+ | fen=Tkinter.Tk() | ||
+ | fen.title(" | ||
+ | app=Application(fen) | ||
+ | fen.geometry(" | ||
+ | fen.mainloop() | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
< | < |