2010-07-28 48 views
0

我賦值用SETATTR()函數在一個循環:迭代變量來改變其功能在Python

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

,那麼我想申請.grid()FUNC。所有這些變量與循環。

例如,

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

我怎麼能這樣做?

回答

1

也許用列表的列表爲你的矩陣來代替:

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

使用getattr()

getattr(self, "e00").grid(row=0, column=0) 
在一個循環

或相應:

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

雖然有可能是一個更好的解決方案,這取決於你的代碼實際上做。

6

這不是正確的方法。創建一個屬性並將所有數據放入其中。

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

這是爲什麼好? – erkangur 2010-07-28 22:23:53

+1

因爲您可以使用一個變量而不是30 * 6,並且您可以在不使用醜陋和慢字符串操作+ getattr/setattr的情況下操作元素。另外,因爲它是這項工作的正確工具,並且已經在那裏 - 重新發明車輪毫無意義。 – delnan 2010-07-28 22:53:55

+0

numpy.array給出錯誤: matrix = numpy.array((6,10),Entry(root)) TypeError:數據類型不理解 – erkangur 2010-08-22 21:25:21