ich habe zwei Comboboxen, die ich mit Werten aus einem Dictionary fülle. Dabei soll die zweite Combobox in Abhängigkeit der Auswahl der ersten Box gefüllt werden. Als Init bekomme ich die Boxen so gefüllt wie ich es gerne hätte. Zum späteren Aktualisieren habe ich eine Funktion geschrieben und die an die erste Combobox gebunden. Allerdings hat diese Funktion ja keinen Zugriff an die zweite Combobox und ich weiß nicht wie ich die neue Liste in die zweite Combobox bekomme. Kann ich irgendwie trotz der lambda Funktion einen Wert zurückgeben?
Also in Kurz: Wie bekomme ich über eine Funktion ein Fensterelement aktualisiert?
Hier mal ein Minimalbeispiel, was ich bisher in der Richtung habe:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
import tkinter as tk
import tkinter.ttk as ttk
def mainframe():
frame = tk.Tk()
frame.title('Frame')
dictionary = {"Schreibschrift": {"S": [[1, 1], [0, 0]], "T": [[0, 0], [1, 1]]},
"Druckschrift": {"D": [[1, 0], [1, 0]], "E": [[0, 1], [0, 1]]}}
# create the combo boxes
combo_font = ttk.Combobox(frame)
combo_font.grid(row=0, column=1, sticky='n')
combo_font.bind('<<ComboboxSelected>>', lambda _event: update_letter(dictionary, combo_font.get()))
combo_letter = ttk.Combobox(frame)
combo_letter.grid(row=1, column=1, sticky='n')
# Init
font_list = []
for font in dictionary:
font_list.append(font)
combo_font['values'] = font_list
combo_font.set(font_list[0])
letter_list = []
for letter in dictionary[combo_font.get()]:
letter_list.append(letter)
combo_letter['value'] = letter_list
combo_letter.set(letter_list[0])
frame.mainloop()
def update_letter(data_loaded, selected_font, v):
# Buchstaben auslesen
letter_list = []
for letter in data_loaded[selected_font]:
letter_list.append(letter)
# Was mache ich jetzt mit dieser Liste?
# combo_letter ist hier ja nicht bekannt
if __name__ == '__main__':
mainframe()