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

在Python中使用for循环设置对象列表的属性,python,list,for-loop,tkinter,config,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) lumbe

我已经编写了一个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”解释为字符串,而不是对象的名称。我想做不可能的事吗?

你可以列出小部件本身:

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

您可以列出小部件本身:

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

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

widgets = ['a', 'b', 'c']
for w in widgets:
    globals()[w].config(state=DISABLED)
但是,如果你发现有必要这样做,就要非常小心——因为在你的设计过程中很可能出现了一些问题


另一方面-也许
locals()
会更好-但很难说…

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

widgets = ['a', 'b', 'c']
for w in widgets:
    globals()[w].config(state=DISABLED)
但是,如果你发现有必要这样做,就要非常小心——因为在你的设计过程中很可能出现了一些问题


另一方面-也许
locals()
会更好-但很难说…

为什么要提供这样的答案??问:“我怎么能放火烧了我的整个房子?”答:“你可能不想,但汽油真的很好……”Nedbatcheld,事实证明,这完全是多余的,但在提问时是一个有效的答案(有适当的警告)。@Nedbatcheld以及为什么互联网很适合提问,但是,我永远也见不到这些人:@JonClements:在Tkinter中,当您有一个按名称命名的小部件时,您可以使用任何
Tk()
实例中存在的
nametWidget
方法。Ned的回答实际上是一个简短的评论,上面写着“删除逗号”,可惜它被迅速接受了。但是,请更新你的答案来考虑< /Cord> nAtMaWiDige`。为什么要提供这样的答案?问:“我怎么能放火烧了我的整个房子?”答:“你可能不想,但汽油真的很好……”Nedbatcheld,事实证明,这完全是多余的,但在提问时是一个有效的答案(有适当的警告)。@Nedbatcheld以及为什么互联网很适合提问,但是,我永远也见不到这些人:@JonClements:在Tkinter中,当您有一个按名称命名的小部件时,您可以使用任何
Tk()
实例中存在的
nametWidget
方法。Ned的回答实际上是一个简短的评论,上面写着“删除逗号”,可惜它被迅速接受了。但是,请更新你的答案,考虑 NATOMWODIGET。谢谢你的快速回复。现在看来很明显!省略引号非常有效。谢谢你的快速回复。现在看来很明显!去掉引号效果很好。