multiple Checkbuttons erstellen und abfragen

Fragen zu Tkinter.
Antworten
Tobias74
User
Beiträge: 10
Registriert: Montag 4. Mai 2020, 20:36

Hallo Zusammen,
ich möchte über einen filedialog mehrere Dateien auswählen und danach in einem Frame mit einem Checkbutton ausgeben um Sie dann für weitere Aktionen auswählen zu können.
Das klappt auch ganz gut. Habe das Ergebnis aus dem Filedialog hier mal mit den 4 Beispielfiles im Tupel eingefügt.
Stehe irgendwie grade auf dem Schlauch wie ich bei der Erstellung der Checkbuttons über die Schleife am besten die Variablen definiere und zugreifen kann. Sorry für die wahrscheinlich triviale Fragen, aber ich komme grade nicht drauf.
Vielen Dank

Code: Alles auswählen

import tkinter as tk
root=tk.Tk()
i=1
var=tk.IntVar

filenames = ("file1","file2", "file3", "file4")

for file in filenames:
   box =tk.Checkbutton(root,text=file, variable=var)
   box.grid(row=i, column=0)
   i=i+1

root.mainloop
Benutzeravatar
sparrow
User
Beiträge: 4211
Registriert: Freitag 17. April 2009, 10:28

Die Checkbox alleine nützt ja nichts. Du musst ja auch etwas mit dem File machen, also zum Beispiel deren Nsmen anzeigen. Sonst kann man den Bezug Checkbox zu Dateiname ja nicht nachvollziehen.

Wir verlassen nun den Bereich der trivialen GUI-Programmierung und betreten den wunderbaren Bereich der objektorientierten Programmierung, um uns Dinge über Zustände hinweg zu merken:
Dein Fenster ist eine Klasse. In der führst du eine Liste. Und mit jedem Einfügen auf dem Widget fügst du dort auch die Box hinzu. Oder vielleicht gleich einen Tuple mit Filename und Box. Darin merkst du dir also die Elemente.
Sirius3
User
Beiträge: 17777
Registriert: Sonntag 21. Oktober 2012, 17:20

Funktionen, Methoden oder Klassen sollte man auch aufrufen. IntVar oder mainloop zum Beispiel. Auch Code, den man im Forum postet, sollte sorgfältig geschrieben sein, denn sonst weiß der Leser nicht, ob das Schlamperei oder Unwissenheit ist. Eingerückt wird immer mit vier Leerzeichen pro Ebene, nicht drei. Wenn man einen Index braucht, benutzt man enumerate. filenames sollte eine Liste und kein Tupel sein. Aus filenames kommt plötzlich file, was etwas ganz anderes ist. Die Checkbuttons sammelt man in einer Liste.

Code: Alles auswählen

import tkinter as tk

def main():
    root = tk.Tk()
    filename_selection = tk.IntVar()
    filenames = ["file1","file2", "file3", "file4"]
    filenamecheckboxes = []
    for row, filename in enumerate(filenames, 1):
        box = tk.Checkbutton(root, text=filename, variable=filename_selection)
        box.grid(row=row, column=0)
        filenamecheckboxes.append(box)
    root.mainloop()

if __name__ = "__main__":    
    main()
Tobias74
User
Beiträge: 10
Registriert: Montag 4. Mai 2020, 20:36

perfekt, das hilft mir wirklich weiter. Vielen Dank
Antworten