Tkinter: grid oder pack in einem raster?

Baue ich noch eine GUI für eine software und wollen, um dies zu erreichen:

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

Menü oben hat einige high-level-Funktionalität, Menü niedrigeren verändert sich in Abhängigkeit von Benutzereingaben. Statusbar ändert seinen Inhalt oft.


Leider Tkinter weigert zu arbeiten.

Mithilfe der grid-layout-manager ich nicht in der Lage waren zu schaffen, eine stabile Konstruktion und das hinzufügen von Inhalten, wie Beschriftungen und Tasten, um das Menü auf der linken Seite:

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()

Diesem design funktionierte ohne Inhalt im Menü auf der linken Seite. Immer wenn ich etwas in self.menu_left_upper oder self.menu_left_lower, wie die test label, mein design kaputt: die Menü-frames verschwunden.
Darüber hinaus auch mit columnspan, ich hatte zu entfernen die statusbar, weil, wenn es Hinzugefügt wurde, werden die Menüs auf der linken Seite verschwand, wieder.


Mit pack-layout-manager ich habe diese:

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

Da wollte ich den Menü-frame auf der linken Seite zu verbrauchen, den vollen y-Raum, den ich gemacht es wachsen mit pack(side="left", expand=True, fill="both"), aber das setup immer verneint die statusbar zu gehen, für die volle Breite.

Neben der reinen pack-manager-code sieht "hässlich". Ich denke, dass ein design mit einem grid-manager ist "klarer". Daher dachte ich ein raster-oder ein pack-layout in einem raster-layout wäre schön?


Kann jemand helfen? Ich bin stecken in der GUI-Hölle :/

  • Bitten Sie um Hilfe mit Gitter, oder für Hilfe bei der Verwendung von pack, oder haben Sie nicht Sorge, was ist, so lange gibt es das gewünschte Aussehen? Wie funktioniert pack code hässlich Aussehen? Es ist nur code.
  • Ich nicht, egal, was verwendet wird, solange es funktioniert. Allerdings würde ich lieber den grid-manager, da ein grid-layout macht mehr Sinn für mich. Es ist leicht zu verstehen und zu erweitern, während mit viel pack()'s mit verschiedenen side=... Attribute sieht irgendwie verwirrend für mich.
  • Wollen Sie "Menü oben" und "Menü unten" auf jeden Anteil 50% der Fläche?
  • Vorzugsweise ja. Ich habe versucht, zu spielen mit der weight=... Attribut, aber meine versuche, dies hat nicht funktioniert, auch.
InformationsquelleAutor daniel451 | 2016-04-08
Schreibe einen Kommentar