Widgets dynamisch erzeugen und auslesen/manipulieren
Verfasst: Dienstag 5. September 2017, 18:57
Hallo zusammen,
ich beschäftige mich derzeit mit der Frage wie man verschiedene Widgets, hauptsächlich Entry und Label, dynamisch erzeugen und darauf zugreifen kann. Bislang fand ich immer wieder den Hinweis dass man die Widgets dafür in Listen oder Dictionaries speichert. Das will mir nicht so richtig gelingen.
Mein Ziel:
Eine Einkaufsliste für verschiedene Standorte (Märkte) in folgender tabellarischer Anordnung:
Mein Ansatz:
Im oberen Teil erzeuge ich ein Dictionary mit folgender Zuordnung:
Artikel1, Entry
Artikel2, Entry
usw.
Das fertige Dictionary gebe ich wieder zurück.
Im unteren Teil wird ein weiteres Dictionary gebaut in dem die Zuordnung folgendermaßen ist:
Markt1, DictionaryMitObigerZuordnung
Markt2, DictionaryMitObigerZuordnung
usw.
Die Print-Anweisung in der letzten Zeile gibt übrigens das hier aus:
Genau so habe ich es mir vorgestellt. Es verwundert mich allerdings, dass dort wo ich die Entry-Objekte erwarte, immer nur "None" steht.
Zugreifen auf die Entry-Widgets wollte ich nun über so etwas in der Art:
Bekomme aber folgende Fehlermeldung:
Meine Frage:
Ist meine Vorgehensweise grob richtig, oder macht man so etwas komplett anders?
Vielen Dank im Voraus!
ich beschäftige mich derzeit mit der Frage wie man verschiedene Widgets, hauptsächlich Entry und Label, dynamisch erzeugen und darauf zugreifen kann. Bislang fand ich immer wieder den Hinweis dass man die Widgets dafür in Listen oder Dictionaries speichert. Das will mir nicht so richtig gelingen.
Mein Ziel:
Eine Einkaufsliste für verschiedene Standorte (Märkte) in folgender tabellarischer Anordnung:
Code: Alles auswählen
Markt1 Markt2 Markt3 ...
Artikel1 Entry Entry Entry Entry
Artikel2 Entry Entry Entry ...
Artikel3 ... ... ... ...
...
Code: Alles auswählen
def baue_artikel_dictionary():
# Hier erfolgt eine Datenbankabfrage die mir alle vorhandenen Artikel auflistet. Ergebnis steht in artikel.
artikel_eingabefelder = {}
i = 2
for row in artikel.fetchall():
artikel_eingabefelder[row[0]] = tk.Entry(self).grid(row=i, column=1)
i = i + 1
return artikel_eingabefelder
Artikel1, Entry
Artikel2, Entry
usw.
Das fertige Dictionary gebe ich wieder zurück.
Code: Alles auswählen
MAERKTE = ["Laar", "Beeck", "Buchholz"]
artikel_dictionary = {}
for markt in MAERKTE:
artikel_dictionary[markt] = baue_artikel_dictionary()
print("Finales Dictionary: " + str(artikel_dictionary))
Markt1, DictionaryMitObigerZuordnung
Markt2, DictionaryMitObigerZuordnung
usw.
Die Print-Anweisung in der letzten Zeile gibt übrigens das hier aus:
Code: Alles auswählen
Finales Dictionary: {'Laar': {'Melone': None, 'Banane': None, 'Chicoree': None}, 'Beeck': {'Melone': None, 'Banane': None, 'Chicoree': None}, 'Buchholz': {'Melone': None, 'Banane': None, 'Chicoree': None}}
Zugreifen auf die Entry-Widgets wollte ich nun über so etwas in der Art:
Code: Alles auswählen
print("Einkaufsmenge = " + str(artikel_dictionary["Laar"]["Melone"].get()))
Code: Alles auswählen
print("Einkaufsmenge = " + str(artikel_dictionary["Laar"]["Melone"].get()))
AttributeError: 'NoneType' object has no attribute 'get'
Ist meine Vorgehensweise grob richtig, oder macht man so etwas komplett anders?
Vielen Dank im Voraus!