2012-12-26 49 views
0

我已經編寫了一個Python程序,我需要將一組tkinter小部件從啓用切換到禁用並返回。我可以這樣做...使用for循環在Python中設置對象列表的屬性

deadparrotlabel.config(state=DISABLED) 
sillywalkslabel.config(state=DISABLED) 
vikingslabel.config(state=DISABLED) 
dinsdalelabel.config(state=DISABLED) 
antpoetrylabel.config(state=DISABLED) 
lumberjacklabel.config(state=DISABLED) 
nudgenudgelabel.config(state=DISABLED) 
saynomorelabel.config(state=DISABLED) 
crunchyfroglabel.config(state=DISABLED) 
larksvomitlabel.config(state=DISABLED) 

但我覺得應該有一個更有效的方法,有一個for循環和一個列表或其他東西。我只是不知道如何讓它工作,或者即使可以完成。這是我試過,但沒有奏效:

labellist = ['deadparrotlabel', 'sillywalkslabel', 'vikingslabel', 'dinsdalelabel', 'antpoetrylabel', 'lumberjacklabel', 'nudgenudgelabel', 'saynomorelabel', 'crunchyfroglabel', 'larksvomitlabel'] 
for i in lablelist: 
    i.config(state=DISABLED) 

的Python解釋「我」作爲一個字符串,而不是一個對象的名稱。我想要做不可能的事情嗎?

回答

5

您可以進行小部件本身的列表:

widgets = [deadparrotlabel, sillywalkslabel, ... ] 
for w in widgets: 
    w.config(state=DISABLED) 
+0

謝謝你,快速回復。現在看起來很明顯!省略引號完美運作。 –

0

我認爲斯內德的是正確的答案,但是,在一般情況下,如果你真的做有一個字符串,而不是一個對象,可以使用,則:

widgets = ['a', 'b', 'c'] 
for w in widgets: 
    globals()[w].config(state=DISABLED) 

不過,如果你覺得需要這非常謹慎 - 看成是最有可能出問題了在設計過程...

在旁邊 - 也許locals()會更好 - 但很難說...

+0

爲什麼要提供這樣的答案?問:「我怎麼可以放火燒我的整個房子?」答:「你可能不想,但汽油工作真的很好......」 –

+0

@NedBatchelder事實證明 - 它純粹是多餘的 - 但是在詢問(有適當的警告)時是一個有效的答案。 –

+0

@NedBatchelder爲什麼互聯網是偉大的問東西,但能夠保持感恩我永遠不會遇到這些人:http://answers.yahoo.com/question/index?qid=20100503200027AAc6DNi –