Salut,
Qu'appelles-tu menu principal ? Est-ce la barre des menus ?
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 ?
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.
Partager