Ich baue eine GUI für eine Software und will dies erreichen:Tkinter: Gitter oder Pack in einem Gitter?
######################################
# | some title #
# menu upper |----------------------#
# | #
# | CANVAS #
# menu lower | #
# | #
#------------------------------------#
# statusbar #
######################################
Menü obere hat einige hohe Funktionalität, Menü untere wird in Abhängigkeit von Benutzereingaben zu ändern. Die Statusleiste ändert häufig ihren Inhalt.
Leider weigert sich Tkinter zu arbeiten.
Mit dem Raster-Layout-Manager ich war nicht in der Lage, eine stabile Konstruktion und das Hinzufügen von Inhalten wie Etikett und Tasten, um das Menü auf der linken Seite zu erstellen:
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()
Diesen Entwurf ohne Inhalt im Menü gearbeitet auf der linken Seite. Immer wenn ich etwas in self.menu_left_upper
oder self.menu_left_lower
, wie das test
Etikett, fügte, wurde mein Entwurf pleite: die Menürahmen verschwanden. Zusätzlich, selbst mit Spaltenspanne, musste ich die Statusleiste entfernen, denn als es hinzugefügt wurde, verschwanden die Menüs auf der linken Seite wieder.
Mit Pack Layout-Manager Ich habe dies:
######################################
# | some title #
# |----------------------#
# menu upper | #
# | CANVAS #
# | #
# menu lower | #
# |----------------------#
# | statusbar #
######################################
Da ich den Menürahmen auf der linken Seite wollte die volle y-Raum verbrauchen ich es mit pack(side="left", expand=True, fill="both")
wachsen gemacht, aber diese Einstellung verleugnet die Statusleiste immer für die volle Breite.
Außerdem sieht der Pure Pack Manager Code "hässlich". Ich denke ein Design mit einem Grid Manager ist "klarer". Daher dachte ich ein Gitter oder ein Pack-Layout in einem Raster-Layout wäre nett?
Kann jemand helfen? Ich bin in der GUI-Hölle stecken:/
Fragen Sie nach Hilfe mit Grid, oder für Hilfe mit Pack, oder ist es egal, was verwendet wird, solange es das gewünschte Aussehen gibt? Wie sieht 'Pack' Code hässlich aus? Es ist nur Code. –
Es ist mir egal, was verwendet wird, solange es funktioniert. Allerdings würde ich den Grid Manager bevorzugen, da ein Grid Layout für mich sinnvoller ist. Es ist leicht zu verstehen und zu erweitern, während die Verwendung von vielen 'pack()' s mit verschiedenen 'side = ...' Attributen für mich irgendwie verwirrend aussieht. – daniel451
Möchten Sie "Menü obere" und "untere Menü" jeweils 50% der Fläche teilen? –