Tabelle scrollen mit feststehendem Header

Fragen zu Tkinter.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Hallo
Ich versuche eine Tabelle mit festem Header und einem scrollbaren Inhalt zu erstellen.
Mein Code stellt erstmal nur die Grundlagen dar.
Mit dem Einbinden von Canvas und Autoscrollbars hab ich kein Problem,
vielmehr hoffe ich Tipps zu bekommen, wie ich Header und Inhalt trennen kann, damit nur der Inhalt scrollable ist ohne
die Abhändigkeit der Spaltenbreite zwischen beiden zu verlieren.
Wenn ich ein Header- und ein Inhaltsframe einbaue, sind die Spalten von Header und Inhalt unter Umständen unterschiedlich.
Hat da jmd bidde ma einen Tipp?

Code: Alles auswählen

import tkinter as tk

root = tk.Tk()
root.geometry("500x350")
user_frame = tk.Frame(root)
user_frame.pack(fill=tk.BOTH, expand=True)
lb_frame = tk.LabelFrame(user_frame,
                         text=" Tabelle 1 ",
                         font=('Arial', 9, 'bold'),
                         fg="gainsboro",
                         bg="grey"
                         )

lb_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True, padx=20, pady=10)
lb_frame.grid_rowconfigure(0, weight=0)
lb_frame.grid_rowconfigure(1, weight=0)
lb_frame.grid_columnconfigure(0, weight=1)
lb_frame.grid_columnconfigure(1, weight=1)
lb_frame.grid_columnconfigure(2, weight=1)
lb_frame.grid_columnconfigure(3, weight=1)
lb_frame.grid_columnconfigure(4, weight=1)

# HEADER
cols = [' Tabellennamen ', ' Tabellendaten \n Aktiv/Zeilen [Spalten] ', ' Tabellen-\nauswahl ']
for column in range(len(cols)):
    tk.Label(lb_frame, text=cols[column], relief=tk.GROOVE, bg='lightsteelblue').grid(row=0, column=column*2, columnspan=2, sticky=tk.NSEW)

# CONTENT
user_info = [['Datenmuster_vr_2019-12-04.xlsx', 'Projekt', 33, 18, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'Name', 2, 38, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'Straße', 1, 29, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'Hausnummer', 1, 12, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'PLZ', 2, 3, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'Ort', 2, 14, 25],
             ['Datenmuster_vr_2019-12-04.xlsx', 'Datum', 2, 6, 25]
             ]

for zeile, cell_info in enumerate(user_info):
    name = cell_info[0]
    text = cell_info[1]
    rows = cell_info[2]
    columns = cell_info[3]
    row_limit = cell_info[4]
    if row_limit is not None and row_limit < rows:
        parser = row_limit
    else:
        parser = rows
    tk.Label(lb_frame, text=cell_info[1], justify=tk.CENTER, anchor=tk.W, relief=tk.GROOVE).grid(row=zeile+1, column=0, columnspan=2, sticky=tk.NSEW)
    tk.Label(lb_frame, text="{0}/{1} [{2}]".format(parser, rows, columns), justify=tk.CENTER, relief=tk.GROOVE).grid(row=zeile+1, column=2, columnspan=2, sticky=tk.NSEW)
    tk.Button(lb_frame, text='Button_'+str(zeile), justify=tk.CENTER, relief=tk.GROOVE).grid(row=zeile+1, column=4, columnspan=2, sticky=tk.NSEW)


root.mainloop()

DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Trotzdem danke :)
Antworten