Braucht jede Zeile ein eigenes Frame

Fragen zu Tkinter.
Antworten
Lunepi
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 14:38

Moin,

ich nutze den pack- manager und Frames.
Jetzt hatte ich mir in meinem jugendlichem Leichtsinn und als Anfänger gedacht, ich kann einfach mehrere Zeilen Label/Entry Kombis in ein Frame packen... wie mir scheint weit gefehlt oder gibt es eine Möglichkeit?

Code: Alles auswählen

schnipp
        frame1_r = Frame(right_frame)
        frame1_r.pack(fill=X)
        hostname_label = Label(frame1_r,text="Hostname:")
        hostname_label.pack(side=LEFT, padx=5, pady=5)

        info_hostname = Entry (frame1_r,textvariable=hostname  )
        info_hostname.pack(fill=X,padx=5,pady=5, expand=True)

        info_hostname.delete(0,END)
        info_hostname.insert(0,hostname)
        info_hostname.configure(state="readonly")

        username_label = Label(frame1_r, text="Username:")
        username_label.pack(side=LEFT, padx=5, pady=5)
        info_username = Entry (frame1_r,textvariable=hostname  )
        info_username.pack(fill=X,padx=5,pady=5, expand=True)

        phone_label = Label(frame1_r, text="Phone:")
        phone_label.pack(side=LEFT, padx=5, pady=5)
        info_phone = Entry(frame1_r, textvariable=hostname)
        info_phone.pack(fill=X, padx=5, pady=5, expand=True)
schnapp
Das Ergebnis sieht zwar Intressant aus, ist aber halt weit entfernt von dem was ich erreichen wollte.

Muss ich also für jede Zeile ein Frame erstellen?

Gruß Lunepi
Benutzeravatar
__blackjack__
User
Beiträge: 14092
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lunepi: Innerhalb eines Container-Widgets sollte man nur eine Seite bei `pack()` verwenden, sonst kann man interessante Ergebnisse bekommen, wie Du schon festgestellt hast. Für `Label` und dazugehörige Eingabelemente eignet sich ein `grid()` wohl besser.
“It is easier to change the specification to fit the program than vice versa.” — Alan J. Perlis
Lunepi
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 14:38

Danke erstmal schon mal Danke für die Antwort.

Wann würden sich denn pack anbieten? Ich hatte mit grid angefangen war aber nicht so richtig zufrieden. Außerdem suchte ich, ne Möglichkeit die mir "LabelFrame" bietet, das hat nach meinem Verständnis dazugeführt dass ich "pack" zu nutzen habe.
Als ich aber versucht habe herauszufinden, was ist wann besser oder sinnvoller, hab ich keine eindeutige Antwort gefunden (oder nicht verstanden).
Das was ich verstanden habe, dass man tunlichst das mischen sein lassen sollte - just google ich noch mal und finde prompt die gegenteilige Antwort....
Hm das verwirrt irgendwie.
Ich werde noch mal versuchen 3 Frames zu erzeugen und meine Elemente darin mit grid zu ordnen ...
Benutzeravatar
__blackjack__
User
Beiträge: 14092
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lunepi: `grid()` wenn man etwas Tabellenförmig in Spalten und Zeilen in Zellen anordnen will, und `pack()` wenn man etwas neben- oder untereinander anordnen will. Für Labels links und Eingabeelemente rechts bietet sich ein `grid()` an, weil man sonst die Labels schlecht bis gar nicht rechtsbündig ausrichten kann, was man ja normalerweise haben will.
“It is easier to change the specification to fit the program than vice versa.” — Alan J. Perlis
Lunepi
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 14:38

Moin,

Danke, der Denkanstoss hat gereicht - der Knoten im Kopp is zu mindest erstmal gelöst. Und ja ich nutze jetzt grid.

Gruß Christian
Antworten