Seite 1 von 1

Aus for-Schleife erzeugte Entrys einzeln ansprechen

Verfasst: Sonntag 27. Mai 2018, 09:20
von Harrison
Hallo ich habe eine Frage bezüglich dem auslesen von Entrys die mit Hilfe einer Liste und for-Schleife erzeugt worden sind.

mein Test-Code ist:

Code: Alles auswählen

import tkinter as tk
root=tk.Tk()
root.title("Entrys über Schleifen erstelllen und ansprechen")

ListeGrundinfos=["Realname", "Charaktername", "Stärken"]

def auswertung1():
    print(var.get())
    

for var in ListeGrundinfos:
    var=tk.Entry(root, text=var, width=10)
    var.pack()
    

Testbutton=tk.Button(root, text="Testbutton", command=auswertung1)
Testbutton.pack()

root.mainloop()
es werden 3 Entrys erzeugt, jedoch kann ich immer nur das letzte Entry auslesen (klar, da es als letztes die Variable var zugeordnet ist).
ich war der meinung, das dann aus der Variable "var" dann z.b. die Variable "Realname" wird und auch mit Realname.get() ausgelesen werden könnte.

Könnt ihr mir bei meinem Denkfehler helfen und eventuell ein paar tipps geben?

Mit freundlichen Grüßen

Harrison.

Ps. ist Python 3.6

Re: Aus for-Schleife erzeugte Entrys einzeln ansprechen

Verfasst: Sonntag 27. Mai 2018, 09:53
von __deets__
Wenn du auf die Entries zugreifen willst, musst du die dir merken in einer geeigneten Datenstruktur. Je nach Anwendungszweck einer Liste oder einem Wörterbuch. In deinem Fall eher einem Wörterbuch, weil du ja mit der Charaktereigenschaft zugreifen willst.

Re: Aus for-Schleife erzeugte Entrys einzeln ansprechen

Verfasst: Sonntag 27. Mai 2018, 10:17
von bfm
Hi,

das geht ganz einfach. Die Entrys in eine Liste stecken und dann darüber iterieren.

Code: Alles auswählen


import tkinter as tk
root=tk.Tk()
root.title("Entrys über Schleifen erstelllen und ansprechen")

ListeGrundinfos=["Realname", "Charaktername", "Stärken"]

#Liste für die Entry erstellen
ListeEntry=[]


def auswertung1():
    #zum Ausgeben der Werte über die Liste der Entrys iterieren
    for item in ListeEntry:
        print('Wert: ', item.get())
    #gezielt auf ein Element der Liste zugreifen
    print('Wert 2. Element in der Liste:', ListeEntry[1].get())
    

for var in ListeGrundinfos:
    #StringVar zur Aufnahme des im Entry dargestellten Wertes definieren
    entry_value = tk.StringVar()
    #StringVar an Entry übergeben
    entry_item=tk.Entry(root, textvariable=entry_value, width=10)
    entry_item.pack()

    #erzeugtes Entry in die Liste stecken
    ListeEntry.append(entry_item)

#einfach mal die Liste mit den Entrys ausgeben
print('ListeEntry: ', ListeEntry)


Testbutton=tk.Button(root, text="Testbutton", command=auswertung1)
Testbutton.pack()

root.mainloop()


mfg

Re: Aus for-Schleife erzeugte Entrys einzeln ansprechen

Verfasst: Sonntag 27. Mai 2018, 10:46
von ThomasL
Harrison hat geschrieben: Sonntag 27. Mai 2018, 09:20

Code: Alles auswählen

ListeGrundinfos=["Realname", "Charaktername", "Stärken"]

for var in ListeGrundinfos:
    var=tk.Entry(root, text=var, width=10)
    var.pack()
Könnt ihr mir bei meinem Denkfehler helfen und eventuell ein paar tipps geben?
Hallo Harrison,
dein "Denkfehler" (eher Verständnisproblem Zuweisung von Werten etc an Variablen) ist folgender;
In der for-Schleife iteriers du über die Liste "ListeGrundinfos mit der Variablen var,
das bedeutet, der Variablen var werden im ersten Schleifendurchlauf der Wert/String "Realname", dann "Charaktername" und dann "Stärken" zugewiesen
in der Schleife weist du der Variablen dann ein tk.Entry Objekt zu, das geht, ist aber kein schöner Codestil
mit jedem Durchlauf wird der Variablen var ein neues tk.Entry Objekt zugewiesen, das vorherige ist damit gelöscht.
Das erklärt wieso du nur das letzte auslesen konntest.

Re: Aus for-Schleife erzeugte Entrys einzeln ansprechen

Verfasst: Sonntag 27. Mai 2018, 13:59
von Harrison
Super vielen Dank für die schnelle und überaus gute Hilfe.

ich habe es gleich mal Ausprobiert (selbst versucht den code zu schreiben) und es hat super geklappt!

vielen vielen Dank.

Grüße Harrison