2012-01-05 58 views
0

這裏是我正在考慮的問題:循環在Tkinter的小部件

我在框架中有許多類似的小部件(例如Lables)。我更新他們的算法(在相關功能使用root.update()的每一個迭代。我想知道什麼,是如何通過每個標籤循環。

當然,他們的東西創建像

self.var1=IntVar() 
self.lab1=Label(frame,textvariable=self.var1) 
self.lab1.grid() 

因此,每個標籤都被命名爲lab1,lab2等。我很確定應該有一個更好的方式來命名它們,這樣我就不必明確地調用每個名稱,或者以某種方式循環它們。

回答

1

最簡單的方法是將對每個小部件的引用存儲在列表或字典中,而不是(或除了)scaler實例變量秒。

+0

你通過'list1的[名單]的意思是這樣'列表1 = [self.var1,self.var2]'然後循環' ? – 2012-01-06 01:32:33

+0

@sigma:是的,那是一種方法。 – 2012-01-06 02:42:44

7

你洽名稱方案,讓您使用變量名通過您的變量進行迭代:

for i in range(1,n): 
    label = getattr(self, "lab"+str(i)) 

您也可以考慮依託Tkinter的人留住你的部件可訪問的樹結構通過children控件屬性(字典):

for child in frame.children.values(): 
    #do something to all children 

而最終添加一些過濾,如果你的框架中包含的其他部件。例如,要過濾的小部件類:

for label in filter(lambda w:isinstance(w,Label), frame.children.itervalues()): 
    #do something on labels 

注意,兒童不會對序遍歷的任何保證。對於這樣的服務,你可以依靠幾何管理器的相關信息,即pack_slavesgrid_slaves

for child in frame.pack_slaves(): 
    #traverse in pack addition order 
#or 
for child in reversed(frame.grid_slaves()): 
    #traverse in grid addition order