# Python: Variable als Listenindex



## borussia (27. April 2005)

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.


```
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:


```
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..


----------



## Fabian (27. April 2005)

Wenn's dir als Liste reicht, hier mein Beispiel:


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

	
>>> print meinArray
['Karl', 'Karl', 'Karl', 'Karl', 'Karl']
>>>
```


----------



## borussia (27. April 2005)

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..


----------



## Fabian (27. April 2005)

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?


```
>>> 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
```


----------



## borussia (27. April 2005)

Nochmals danke für deine Mühen.. wüsste aber nicht, wie ich es zu meinen Zwecken einsetzen könnte! *g*


----------



## Fabian (27. April 2005)

Das ist aber genau das was du wolltest, siehe: 

```
"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


----------



## borussia (27. April 2005)

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?!


----------



## Fabian (27. April 2005)

Hier mein letzer Versuch bevor ich schlafen geh  


```
>>> 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?


----------



## borussia (28. April 2005)

Habs mit ner Liste und ner for-Schleife gelöst.. Danke für die Hilfe


----------

