Seite 1 von 1

Layout verschachteln

Verfasst: Dienstag 8. April 2014, 12:46
von sparrow
Mahlzeit!

Ich versuche gerade eine einfache GUI mit Tkinter zu bauen. Einfach... Tkinter... hach, was habe ich mir da nur wieder vorgenommen.

Egal.

Ich würde gerne ein Layout in einem Layout haben. Bei Javas Swing wäre das mit JPanel möglich. Man hat also das Fenster und setzt darin die Panels, die sich dann wieder wie... ich weiß nicht, wie die Grundfläche des Fensters verhalten. Geht das mit Tkinter auch? Ich dachte, dass Frame() vielleicht so etwas macht, tut es aber nicht.

Im Detail möchte ich ungefähr folgendes machen:

Code: Alles auswählen

from Tkinter import * 

entries = [["Dies", "ist", "ein", "Test"],
           ["mit", "mehreren", "Listen"]]

root = Tk()

headframe = Frame(root).grid(row=0, column=0)
Label(headframe, text="Liste").grid(row=0, column=0)

entries_frame = Frame(root).grid(row=1, column=0)

entry_row = 0
for entry in entries:
    entry_frame = Frame(entries_frame).grid(row=entry_row, column=0)
    column = 0
    for part in entry:
        Label(entry_frame, text=part).grid(row=0, column=column)
        column += 1
    entry_row += 1



root.mainloop()
Aber das .grid() bezieht sich leider immer wieder auf root, obwohl ich ja den einzelnen Widgets eigentlich einen anderen Elter gegeben habe.

Und äääh... Frame macht wohl nicht das was ich dachte.

Re: Layout verschachteln

Verfasst: Dienstag 8. April 2014, 12:57
von EyDu
Lass dir nach Zeile 8 doch mal den Wert von "headframe" ausgeben. Ich wette, dass er nicht dem von dir erwartetem Wert entspricht ;-) Ansonsten gilt: gewöhn dir den *-Import von Tkinter gleich wieder ab und verwende ``import Tkinter as tk``. Das Tkinter-Modul enthält so viele Namen, danach ist dein Namensraum dicht.

Re: Layout verschachteln

Verfasst: Dienstag 8. April 2014, 13:10
von sparrow
Wow... ok. Das heißt erst zuweisen, dann mit .grid() drauf.
Danke :)

Macht jetzt "Frame" doch das was ich denke was es tut?

Re: Layout verschachteln

Verfasst: Dienstag 8. April 2014, 13:24
von BlackJack
@sparrow: Ja `Frame` ist so ein universelles Container-Widget um andere Elemente darin zu gruppieren.

Ich sehe den Sinn von `grid()` bei Dir gerade nicht weil entweder Spalte oder Zeile (oder beides) immer 0 ist. Das kann man mit `pack()` einfacher haben.

Re: Layout verschachteln

Verfasst: Dienstag 8. April 2014, 14:24
von sparrow
BlackJack hat geschrieben:Ich sehe den Sinn von `grid()` bei Dir gerade nicht weil entweder Spalte oder Zeile (oder beides) immer 0 ist. Das kann man mit `pack()` einfacher haben.
Das liegt daran, dass ich meine Code solange zusammengestaucht habe, bis er klein war und der Fehler trotzdem noch kam ;)