2012-12-26 43 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 –