@WvonRiedi: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Dann kann die `__init__()`-Methode nicht mehr so einfach auf die Anzahl der Spalten und Zeilen und die Daten zugreifen → Alles was Funktionen und Methoden ausser Konstanten benötigen wird als Argument(e) übergeben. Wobei die Anzahl der Spalten und Zeilen sowieso nicht übergeben werden sollten, denn wenn man die Daten übergibt, dann kann man diese Werte ja aus den Daten *dort* ermitteln, wo sie gebraucht werden.
Wenn sie denn gebraucht würden, denn Schleifen über Indexwerte um damit dann auf Sequenzen zuzugreifen sind in Python ein „anti-pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den Umweg über einen Laufindex. Sollte man *zusätzlich* zu den Elementen eine laufende, ganze Zahl benötigen, gibt es die `enumerate()`-Funktion.
Gibt es einen Grund warum die Datensätze von Listen in Tupel umgepackt werden?
Die Klasse `Table` macht so keinen Sinn, weil sie nur aus der `__init__()`-Methode besteht und keinem sinnvollen Zustand. Wenn man in einer Schleife etwas immer an den gleichen Attributnamen bindet, dann ist das in aller Regel falsch, weil das keinen Sinn macht immer wieder die Werte zu überschreiben und nur den letzten zu behalten. Zudem gibt es dann den Randfall, dass die Schleife bei einer leeren Datei gar nicht durchlaufen wird, und damit dieses Attribut gar nicht definiert wird.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import csv
from tkinter import CENTER, END, Entry, Tk
def main():
with open("Daten.csv", newline="", encoding="utf-8") as file:
daten = list(csv.reader(file))
fenster = Tk()
fenster.title("Alle Daten anzeigen")
for row_index, row in enumerate(daten):
for column_index, value in enumerate(row):
entry = Entry(
fenster,
width=15,
fg="black",
font=("Arial", 8),
justify=CENTER,
)
entry.grid(row=row_index, column=column_index)
entry.insert(END, value)
fenster.mainloop()
Scrollbars lassen sich auf `Canvas`-Widgets anzeigen. Da muss man dann einen `Frame` in ein `Canvas` packen, in dem dann die Elemente platziert werden. Da gibt's im Netz Rezepte wie man das macht.
Allerdings könntest Du Dir auch erst einmal ein `ttk.Treeview` anschauen. Oder ein anderes GUI-Rahmenwerk.
