Layout verschachteln

Fragen zu Tkinter.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4587
Registriert: Freitag 17. April 2009, 10:28

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
sparrow
User
Beiträge: 4587
Registriert: Freitag 17. April 2009, 10:28

Wow... ok. Das heißt erst zuweisen, dann mit .grid() drauf.
Danke :)

Macht jetzt "Frame" doch das was ich denke was es tut?
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.
Benutzeravatar
sparrow
User
Beiträge: 4587
Registriert: Freitag 17. April 2009, 10:28

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 ;)
Antworten