@AndiArbeit: ja, Klassen wäre ein guter Ansatz. Bei GUI-Programmierung kommst Du da sowieso nicht dran vorbei. Du scheinst StringVar-Objekte als Platzhalter für Deine Listen zu benutzen. Dafür gibt es None:
Code: Alles auswählen
all_includes = [
[None, "Airbag", "AIRBAG", ordner_airbag, None, airbag_var, airbag_var_basis, None],
[None, "Cockpit", "COCKPIT", ordner_cockpit, None, cockpit_var, cockpit_var_basis, None],
]
Statt eine Liste zu erstellen und nachträglich die Einträge zu ändern, ist es in Python üblich, jeweils neue Listen zu erzeugen:
Obwohl eine Liste in Deinem Fall der falsche Datentyp ist. Wie Du bereits selbst erkannt hast, wäre eine Klasse besser geeignet. Das erkannst Du schon alleine daran, dass Du magische Indexwerte benutzt, die beim Lesen des Quelltextes nur Fragezeichen übrig lassen.
Code: Alles auswählen
all_folders = ["Airbag", "Cockpit"]
all_includes = []
for folder in all_folders:
frame = tk.Frame(framelinks , relief=tk.GROOVE)
frame.pack(expand=1,fill=tk.BOTH)
frame.config(bg = "white")
ordner = tk.StringVar()
schrifterstellen(ordner, frame)
ordner.set(folder.upper())
files = os.listdir(os.path.join(link, "INCLUDES", ordner.get()))
files = listeputzen(files)
files.append("")
var_needs_a_name = tk.StringVar()
menu = tk.OptionMenu(frame, var_needs_a_name , *files )
menu.pack(expand=1 , fill=tk.BOTH , side=tk.LEFT )
dropdownanpassen(menu)
var_needs_a_name.trace("w",partial(trace_inc, [var_needs_a_name, var_basis, menu, ordner]))
all_includes.append([frame, folder, folder.upper(), ordner, files, var_needs_a_name, var_basis, menu])
Fang am besten gleich an, Klassen zu benutzen. Mit Deinem jetzigen Ansatz wirst Du nicht weiterkommen:
Code: Alles auswählen
class FileSelector(object):
def __init__(self, framelinks, folder):
self.folder = folder
frame = tk.Frame(framelinks , relief=tk.GROOVE)
frame.pack(expand=1,fill=tk.BOTH)
frame.config(bg = "white")
self.ordner = tk.StringVar()
schrifterstellen(self.ordner, frame)
self.ordner.set(folder.upper())
files = os.listdir(os.path.join(link, "INCLUDES", self.ordner.get()))
files = listeputzen(files)
files.append("")
self.var_needs_a_name = tk.StringVar()
self.menu = tk.OptionMenu(frame, self.var_needs_a_name , *files)
self.menu.pack(expand=1 , fill=tk.BOTH , side=tk.LEFT )
dropdownanpassen(self.menu)
self.var_needs_a_name.trace("w", self.trace_inc)
def trace_inc(self, name, index, mode):
#TODO: what ever
all_folders = ["Airbag", "Cockpit"]
all_includes = []
for folder in all_folders:
all_includes.append(FileSelector(framelink, folder))