Elemente einer Tabelle + Scrollbar werden falsch erstellt

Fragen zu Tkinter.
Antworten
Particledust
User
Beiträge: 15
Registriert: Samstag 1. Februar 2020, 09:17

Guten Tag,

ich habe eine Tabelle erstellt, welche aus Spaltenbezeichnungen (Name, Vorname,..) und Entry's besteht. Die Tabelle hat mehrere Zeilen, weswegen ich eine Scrollbar an die rechte Seite der Tabelle angefügt habe.

Folgendes Problem:
Die breite der Entry-Felder richtet sich nicht nach der breite der Spaltenbezeichnungen aus. Das führt dazu, dass nur 3 anstatt 5 Spalten angezeigt werden. Natürlich kann man die Breite der einzelnen Entry's manuell mit width ändern. Das Resultat sieht aber nicht besonders schön aus. Stattdessen sollen die Breiten der Entry's jeder Spalte sich an der Spaltenbezeichnung ausrichten.

Hat jemand von euch eine Idee, wie man dieses für das folgende Minimalbsp. umsetzen kann:

Code: Alles auswählen

from tkinter import *

root = Tk()
Label(root, text = "Name").grid(row = 0, column = 0)
Label(root, text = "Vorname").grid(row = 0, column = 1)
Label(root, text = "Land").grid(row = 0, column = 2)
Label(root, text = "Stadt").grid(row = 0, column = 3)
Label(root, text = "Adresse").grid(row = 0, column = 4)

container = Frame(root)
canvas = Canvas(container, height = 190)
scrollbar = Scrollbar(container, orient="vertical", command=canvas.yview)
scrollable_frame = Frame(canvas)
scrollable_frame.bind(
    "<Configure>",
    lambda e: canvas.configure(
        scrollregion=canvas.bbox("all")
    )
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(20): # number of rows
    for j in range(5): # number of columns
        Entry(scrollable_frame).grid(row = i + 1  , column = j)

container.grid(row = 1, column = 0, columnspan = 5)
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")

root.mainloop()
Freundliche Grüße
Martin
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Martin,

ich hab das Gefühl, dass da Aufgaben gelöst werden sollen.
Kurs, Schule u.s.w. Denn ähnliche Fragen häufen sich, auch der Stil des Codes.

Zu deinem Problem:
Sternchenimporte werden nicht gern gesehen.
Warum nimmst Du nicht einfach die oberste Zeile der Entrys als Titelzeile?
Mit disabledforground kann die Schriftfarbe gesetzt werden, wenn die Entrys den Status disabled haben.
Eine zweite Möglichkeit wäre deinen Container durch ein LabelFrame Widget zu erstellen.
Dann kannst Du die Titelzeile in das LabelFrame schreiben.
Auf jeden Fall muss dein Canvas breit genug sein um die Spalten anzuzeigen.

Gruss
Peter
Antworten