0

我编写了一个 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' 解释为字符串而不是对象的名称。我在尝试做不可能的事吗?

4

2 回答 2

6

您可以列出小部件本身:

widgets = [deadparrotlabel, sillywalkslabel, ... ]
for w in widgets:
    w.config(state=DISABLED)
于 2012-12-26T14:48:41.070 回答
0

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

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

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

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

于 2012-12-26T14:53:41.837 回答