Seite 1 von 1

tkinter.Entry mit for schleife erstellen

Verfasst: Freitag 18. Januar 2019, 06:54
von Thomi_Hahn
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!")

Re: tkinter.Entry mit for schleife erstellen

Verfasst: Freitag 18. Januar 2019, 08:25
von Sirius3
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!")

Re: tkinter.Entry mit for schleife erstellen

Verfasst: Sonntag 20. Januar 2019, 20:20
von Thomi_Hahn
Hallo Sirius3

Danke für deine Hilfe. Hab es hinbekommen.

MfG