Tkinter: grille ou pack intérieur d'une grille?

Je fais construire une interface graphique pour un logiciel et que vous voulez obtenir ceci:

######################################
#             |      some title      #
# menu upper  |----------------------#
#             |                      #
#             |         CANVAS       #
# menu lower  |                      #
#             |                      #
#------------------------------------#
#              statusbar             #
######################################

Menu supérieur a certains de haut niveau des fonctionnalités, menu inférieur est en train de changer dans la dépendance de la saisie de l'utilisateur. La barre d'état de l'évolution de ses contenus souvent.


Malheureusement, Tkinter, refuse de travailler.

À l'aide de la de la grille de mise en page du gestionnaire de j'ai été incapable de créer une conception stable et l'ajout de contenu comme les étiquettes et les boutons pour le menu sur le côté gauche:

self.root = tk.Tk()
self.root.resizable(width=0, height=0)
self.root.title("some application")

# menu left
self.menu_left = tk.Frame(self.root, width=150, bg="#ababab")
self.menu_left.grid(row=0, column=0, rowspan=2, sticky="ns")

self.menu_left_upper = tk.Frame(self.menu_left, width=150, height=150, bg="red")
self.menu_left_upper.grid(row=0, column=0)

# this label breaks the design   
#self.test = tk.Label(self.menu_left_upper, text="test")
#self.test.pack()

self.menu_left_lower = tk.Frame(self.menu_left, width=150, bg="blue")
self.menu_left_lower.grid(row=1, column=0)

# right area
self.some_title_frame = tk.Frame(self.root, bg="#dfdfdf")
self.some_title_frame.grid(row=0, column=1, sticky="we")

self.some_title = tk.Label(self.some_title_frame, text="some title", bg="#dfdfdf")
self.some_title.pack()

self.canvas_area = tk.Canvas(self.root, width=500, height=400, background="#ffffff")
self.canvas_area.grid(row=1, column=1)

self.root.mainloop()

Cette conception travaillé sans contenu dans le menu sur le côté gauche. Chaque fois que j'ai ajouté quelque chose dans self.menu_left_upper ou self.menu_left_lower, comme le test étiquette, ma conception ai cassé: le menu images ont disparu.
En outre, même avec columnspan, j'ai dû enlever la barre d'état, parce que quand il a été ajouté au menu sur la gauche a disparu, encore une fois.


À l'aide de pack layout manager j'ai obtenu ceci:

######################################
#             |      some title      #
#             |----------------------#
# menu upper  |                      #
#             |         CANVAS       #
#             |                      #
# menu lower  |                      #
#             |----------------------#
#             |       statusbar      #
######################################

Car je voulais le menu image sur la gauche de consommer le plein y de l'espace je l'ai fait grandir avec pack(side="left", expand=True, fill="both"), mais cette configuration refuse toujours la barre de statut d'aller pour la totalité de la largeur.

En outre, la pure pack gestionnaire de code est "moche". Je pense que la conception avec un gestionnaire de réseau est "claire". Donc je pensais une grille ou d'un pack de mise en page à l'intérieur d'une grille de mise en page serait bien?


Peut aider quelqu'un? Je suis coincé dans l'interface graphique de l'enfer :/

  • Êtes-vous de demander de l'aide à l'aide de la grille, ou pour aider à l'aide de pack, ou vous n'avez pas de soins, ce qui est utilisé tant qu'il donne l'apparence voulue? Comment pack code moche? C'est juste le code.
  • Je n'aime pas ce qui est utilisé, tant qu'il fonctionne. Cependant, je préfère le gestionnaire du réseau, depuis une grille de mise en page plus de sens pour moi. Il est facile à comprendre et à se développer, tout en utilisant beaucoup de pack()'s avec différents side=... attributs ressemble un peu confus pour moi.
  • Voulez-vous "menu supérieur" et "menu" en bas" à chaque action de 50% de la surface?
  • De préférence oui. J'ai essayé de jouer avec le weight=... attribut, mais dans mes tentatives, cela ne fonctionne pas, trop.
InformationsquelleAutor daniel451 | 2016-04-08