我賦值用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)
我怎麼能這樣做?
我賦值用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)
我怎麼能這樣做?
也許用列表的列表爲你的矩陣來代替:
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)
使用getattr()
:
getattr(self, "e00").grid(row=0, column=0)
在一個循環
或相應:
getattr(self, "e"+str(i)+str(j)).grid(row=0, column=0)
雖然有可能是一個更好的解決方案,這取決於你的代碼實際上做。
這不是正確的方法。創建一個屬性並將所有數據放入其中。
import numpy as np
self.matrix = np.array((6, 30), Entry(self.top))
for row in self.matrix:
for elt in row:
elt.grid(...)
這是爲什麼好? – erkangur 2010-07-28 22:23:53
因爲您可以使用一個變量而不是30 * 6,並且您可以在不使用醜陋和慢字符串操作+ getattr/setattr的情況下操作元素。另外,因爲它是這項工作的正確工具,並且已經在那裏 - 重新發明車輪毫無意義。 – delnan 2010-07-28 22:53:55
numpy.array給出錯誤: matrix = numpy.array((6,10),Entry(root)) TypeError:數據類型不理解 – erkangur 2010-08-22 21:25:21