使用for循环在Python中设置对象列表的属性

时间:2012-12-26 14:47:07

标签: python list for-loop tkinter config

我编写了一个Python程序,我需要将一组tkinter小部件从启用切换到禁用再返回。我可以这样做......

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将'i'解释为字符串而不是对象的名称。我想做不可能的事吗?

2 个答案:

答案 0 :(得分:5)

您可以自己制作小部件列表:

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

答案 1 :(得分:0)

我认为Ned是正确的答案,但是,一般来说,如果确实确实有一个字符串,而不是一个可以使用的对象,那么:

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

但是,如果您发现需要,请务必小心 - 因为您的设计过程中可能出现问题......

暂时不说 - 或许locals()会更好 - 但很难说......