我写了一个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)
我认为Ned的答案是正确的,然而,一般来说,如果你真的有一个字符串,而不是一个可以使用的对象,那么:
widgets = ['a', 'b', 'c']
for w in widgets:
globals()[w].config(state=DISABLED)
但是,如果你发现需要这样做,就要非常小心——因为在你的设计过程中很可能出现了问题……
说句题外话-也许locals()
会更好-但很难告诉…