Python: Variable als Listenindex

borussia

Grünschnabel
Hey,
ich habe folgendes Problem, ich will in einer while Schleife mehrere Eingabefelder erstellen, deren Werte natürlich auch in unterschiedlichen Variablen gespeichert werden (oder halt als Liste). Allerdings bekomm ich das nicht hin.

Code:
Mannsname=[]
i=0
row=4
column=0
MansT=Label(root, text="Mannschaftsnamen")
MansT.grid(row=3, column=2)
while i < manns:
       global Mannsname
       column=column+1
       MannsnameE = Entry(root, width="18", textvariable=Mannsname[i])
       MannsnameE.grid(row=row, column=column)
       i=i+1

Das war mein erster Versuch, scheitert mit folgender Fehlermeldung:

Code:
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
    return self.func(*args)
  File "C:\Python24\tipp.py", line 127, in create
    MannsnameE = Entry(root, width="18", textvariable=Mannsname[i])
IndexError: list index out of range

Ich weiß halt nicht, wie ich die Variable im Variablennamen anspreche ;) Danke im Vorraus..
 
Zuletzt bearbeitet:
Wenn's dir als Liste reicht, hier mein Beispiel:

Code:
>>> meinArray=[]
>>> i=0
>>> while i < 5:
	meinArray.append("Karl")
	i=i+1

	
>>> print meinArray
['Karl', 'Karl', 'Karl', 'Karl', 'Karl']
>>>
 
Erstmal danke für deine Antwort.. aber sorry, hab's etwas falsch formuliert und noch nicht vollständig..

Das Problem ist ja, dass die eingegeben Daten erst beim Klick auf nen Button ausgewertet werden und dann erst verarbeitet werden. Daher müssen die Eingabefelder, deren Anzahl von der Variable manns abhängt, verschiedene Variablen während des Durchlaufs der while-Schleife zugeordnet bekommen. Daher muss ich irgendwie auf die Variable "i" zugreifen, die sich ja bei jedem Durchlauf um 1 erhöht. Hoffe, du/ihr versteh(s)t, was ich meine..
 
Zuletzt bearbeitet:
OK, ich weis nicht ob ichs verstanden habe (ich bin so verdammt müde, aber will gleich noch was im TV schaun), vielleicht hilft das hier?

Code:
>>> meinArray={}
>>> i=0
>>> for name in ["Peter", "Pan"]:
	meinArray[i]=name
	i=i+1

	
>>> print meinArray
{0: 'Peter', 1: 'Pan'}
>>> print meinArray[0]
Peter
>>> print meinArray[1]
Pan
 
Das ist aber genau das was du wolltest, siehe:
Code:
"Mannsname[i]=StringVar()"

Nur benutzt ich zum testen hier ne for Schleife. Vielleicht machst mir mal nen anschaubares Beispiel - oder du wartst halt bis jemand anders Antwortet ;)
 
Ok, ich versuchs mal mit 'nem Beispiel zu erklären!

manns steht für die Anzahl der Mannschaften.. nehmen wir als Beispiel 2

Das heißt: Die while-Schleife läuft zweimal durch und erstellt 2 Textfelder. Diesen Textfeldern sollen über textvariable= Variablen zugeordnet werden. Die Variablen müssen verschiedene Namen haben, da die Variable sonst vom 2. Textfeld überschrieben würde. Daher habe ich versucht die Variable i, die sich bei jedem Durchlauf verändert, mit in den Variablennamen einzubauen bzw. sie als Listenindex zu benutzen, damit ich für jedes Textfeld eine eigenen Eintrag habe, den ich auch auswerten kann! Hoffe, du verstehst, was ich meine?!
 
Hier mein letzer Versuch bevor ich schlafen geh :p

Code:
>>> Mannsname = {}
>>> i = 0
>>> manns = 2
>>> while i < manns:
	Mannsname[i] = raw_input("Name: ")
	i = i+1

	
Name: Fabian
Name: Borussia
>>> print "Es wurden insgesamt", manns, "Datensaetze eingetragen:"
Es wurden insgesamt 2 Datensaetze eingetragen:
>>> i = 0
>>> while i < manns:
	print Mannsname[i]
	i = i+1

	
Fabian
Borussia

Erklaerung? Ganz easy... Du hast nen Dict "Mannsname", dem fuegst du in der while-Schleife mit Mannsname[i] (welchem ja dem durchlauf entspricht) den Namen zu (hier: Fabian + Borussia). Du bekommst dann mit Mannsname[i] (wobei i eben alles zwischen 0 + 'manns' sein kann) - den Wert zurueck. Damit sollte es doch realisierbar sein?
 

Neue Beiträge

Zurück