2010-07-28 6 views
0

J'attribue des valeurs avec la fonction setattr() dans une boucle:les variables Itération pour changer ses fonctions en Python

for i in range(30): 
     for j in range(6): 
      setattr(self, "e"+str(i)+str(j), Entry(self.top)) 

, alors je veux appliquer .grid() fonct. à toutes ces variables avec une boucle.

Par exemple,

self.e00.grid(row= 0, column= 0) 

Comment puis-je faire cela?

Répondre

1

Peut-être utiliser une liste de listes pour votre matrice à la place:

self.ematrix = [ [ Entry(self.top) for j in range(6)] # columns 
            for i in range(30)] # rows 

for i,row in enumerate(self.ematrix): 
    for j,elt in enumerate(row): 
     elt.grid(row=i,column=j) 
3

Utilisation getattr():

getattr(self, "e00").grid(row=0, column=0) 

ou en conséquence dans une boucle:

getattr(self, "e"+str(i)+str(j)).grid(row=0, column=0) 

Bien qu'il y ait peut-être une meilleure solution, en fonction de ce que votre code est en train de faire.

6

Ce n'est pas la bonne façon de faire les choses. Faites un attribut et mettez toutes les données dedans.

import numpy as np 
self.matrix = np.array((6, 30), Entry(self.top)) 

for row in self.matrix: 
    for elt in row: 
     elt.grid(...) 
+0

Pourquoi est-ce mieux? – erkangur

+1

Parce que vous pouvez avoir une variable au lieu de 30 * 6 et vous pouvez manipuler les éléments sans la manipulation de chaîne laide et lente + getattr/setattr. De plus, parce que c'est le bon outil pour le travail et déjà là - inutile de réinventer la roue. – delnan

+0

numpy.array donne une erreur: matrice = numpy.array ((6,10), entrée (racine)) TypeError: type de données non compris – erkangur

Questions connexes