@Andrey35: Nein, Nein, Nein, und vor allem Nein zu globalen Variablen. Und erst recht dynamisch erzeugte globale Variablen. Ebenfalls Nein zu nummerierten Variablennamen.
Du willst keine einzelnen Namen, die Du umständlich und undurchsichtig erzeugst, auf die Du im Quelltext niemals über den Namen Bezug nimmst, und wo man dann wieder umständlichen undurchsichtigen Code braucht, um darauf zuzugreifen. Du willst einfach eine Liste verwenden.
Ich vermute mal Du hast da einen Sternchen-Import bei `tkinter` gemacht‽ Noch ein: Nein!
Das was Du da an `Check_*` bindest ist unsinnig weil das immer der Wert `None` ist. Das ist der Rückgabewert von den `grid()`-Aufrufen.
An den `IntVar`-Objekten ändert sich nie etwas, weil Du beim `Checkbutton` als `variable` nicht die `IntVar`-Objekte übergibst, sondern eine Zeichenkette mit dem jeweiligen globalen Namen.
Das Ergebnis von `get()` auf `IntVar`-Objekten ist bereits eine ganze Zahl, die braucht man nicht noch mal in einer ganze Zahl umzuwandeln.
Keine Abkürzungen bei Namen. `df` und `r` beschreiben nicht sinnvoll was die Werte bedeuten. Und auch `spaltendf` und `zeilendf` sind kryptisch. Bei beiden würde man einen `DataFrame` erwarten, es sind aber Zahlen. Und es fehlt in beiden ein Unterstrich.
Wenn man beim Checkbutton bei den Werten 0 und 1 bleibt, würde sich eventuell auch `BooleanVar` eher anbieten anstelle von `IntVar`.
Das da kein `self` zu sehen ist, wirkt auch komisch. Für jede nicht-triviale GUI braucht man objektorientierte Programmierung (OOP), also mindestens *eine* eigene Klasse.
Zwischenstand:
Code: Alles auswählen
import tkinter as tk
...
int_vars = list()
for i in range(7, spalten_df):
int_var = tk.IntVar()
tk.Checkbutton(root, text=data[i][zeilen_df], variable=int_var).grid(
row=row_index, column=4
)
int_vars.append(int_var)
row_index += 1
...
eingaben = [int_var.get() for int_var in int_vars]
print(eingaben)