tkinter.Entry mit for schleife erstellen

Fragen zu Tkinter.
Antworten
Thomi_Hahn
User
Beiträge: 2
Registriert: Freitag 18. Januar 2019, 05:01

Hallo. Habe mit tk Entry Felder erstellt und mit einer Funktion die Werte gespeichert. Nun habe ich die Entry Felder durch eine for Schleife verkürzt, aber es wird nicht mehr auf den Befehl .get() in der Funktion zugeriffen. Das Programm läuft, aber die eingegeben Werte werden nicht in ein txt gespeichert..

Danke

# Entry / Eingabe erstellen

ent_entry = {1 : 'self.ent_matrNr', 2 : 'self.ent_vorname', 3 : 'self.ent_nachname', 4 : 'self.ent_gebDatum', 5 : 'self.ent_email', 6 : 'self.ent_telNr'}
text = ['Matrikel Nr.:', 'Vorname', 'Nachname', 'Geburtsdatum', 'E-Mail :', 'Telefonnummer']
i = 0
for k, v in ent_entry.items():
#print(v, type(v))
v = tk.Entry(self)
v.grid(row=i, column=1)
i += 1


'''
self.ent_matrNr = tk.Entry(self)
self.ent_matrNr.grid(row=0, column=1)
self.ent_vorname = tk.Entry(self)
self.ent_vorname.grid(row=1, column=1)
self.ent_nachname = tk.Entry(self)
self.ent_nachname.grid(row=2, column=1)
self.ent_gebDatum = tk.Entry(self)
self.ent_gebDatum.grid(row=3, column=1)
self.ent_email = tk.Entry(self)
self.ent_email.grid(row=4, column=1)
self.ent_telNr = tk.Entry(self)
self.ent_telNr.grid(row=5, column=1)
'''
self.button_speichern = tk.Button(self, text="Speichern", command=self.speichern)
self.button_speichern.grid(row=7, column=0, columnspan=20, padx=5, pady=10, sticky='w')

def speichern(self):
out = tk.filedialog.asksaveasfile(mode='w', defaultextension=".txt")
text2save = 'Matrikel Nr., Vorname, Nachname, Geburtsdatum, E-Mail, Telefonnummer\n' + self.ent_matrNr.get() +','+ self.ent_vorname.get() +','+ self.ent_nachname.get() +','+ self.ent_gebDatum.get() +','+ self.ent_email.get() +','+ self.ent_telNr.get()
out.write(text2save)
out.close()
self.daten_loeschen()
tk.messagebox.showinfo("Studentendaten - Speichern", "Daten wurden gespeichert!")
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt Dir die erzeugten Entry-Felder auch merken. Nur weil eine Variable v irgendwann einmal dem String "self.ent_matrNr" zugewiesen war, ändert sich nichts, wenn v später ein Entry-Feld ist. Stell Dir vor, da würde irgendetwas magisches passieren, was bedeutet dann

Code: Alles auswählen

v = 5
v = 7
Vielleicht dass in Zukunft überall wo der Wert 5 benutzt wird, statt dessen mit 7 gerechnet wird?
Was Du suchst ist ein Wörterbuch, wo zu jedem Eintrag das Eingabefeld zugeordnet ist:

Code: Alles auswählen

class InputDialog:
    ENTRY_NAMES = ['Matrikel Nr.:', 'Vorname', 'Nachname', 'Geburtsdatum', 'E-Mail :', 'Telefonnummer']
    def __init__(self, ...)
        # Entry / Eingabe erstellen
        self.entries = {}
        for i, name in enumerate(self.ENTRY_NAMES):
            tk.Label(self, text=name).grid(row=i, column=0)
            entries[name] = tk.Entry(self)
            entries[name].grid(row=i, column=1)
        self.button_speichern = tk.Button(self, text="Speichern", command=self.speichern)
        self.button_speichern.grid(row=7, column=0, columnspan=20, padx=5, pady=10, sticky='w')

    def speichern(self):
        filename = tk.filedialog.asksaveasfilename(defaultextension=".txt")
        with open(filename, 'w') as output:
            output.write(', '.join(self.ENTRY_NAMES) + '\n')
            output.write(', '.join(self.entries(k).get() for k in self.ENTRY_NAMES) + '\n')
        self.daten_loeschen()
        tk.messagebox.showinfo("Studentendaten - Speichern", "Daten wurden gespeichert!")
Thomi_Hahn
User
Beiträge: 2
Registriert: Freitag 18. Januar 2019, 05:01

Hallo Sirius3

Danke für deine Hilfe. Hab es hinbekommen.

MfG
Antworten