在for循环中创建几个tkinter小部件并将它们分配给变量

时间:2017-06-02 23:10:44

标签: python class for-loop tkinter variable-assignment

在一篇关于Python / tkinter的食谱书中,我找到了关于如何在一个循环中创建三个Radiobutton小部件的代码片段:

colors = ["Blue", "Gold", "Red"]
radVar = tk.IntVar()
radVar.set(99)                   

for col in range(3):                          
    curRad = 'rad' + str(col)
    curRad = tk.Radiobutton(win, text=colors[col],         variable=radVar,
         value=col,
         command=radCall)

    curRad.grid(column=col, row=5, sticky=tk.W)

我明白了使用循环,但我希望变量curRad可以用作例如列表,最后包含对所有这些Radiobuttons的引用。这里有什么问题? Python是否以某种方式在每次迭代中创建自定义命名变量?对我来说,看起来我们正在为变量分配一个字符串,然后将一个小部件的引用分配给同一个变量,并在每次迭代时执行相同的操作。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

curRad = 'rad' + str(col)完全没有任何结果,因为变量会在下一行重新分配。

代码没有给你任何持久的单个单选按钮的引用 - 但你通常不需要一个:确定选择哪一个,或通过变量(radVar)以编程方式选择一个他们都分享。

如果你真的想保留对每个按钮的引用,你可以把:

allRads = []

在循环之上,并且:

allRads.append(curRad)

在循环中。

答案 1 :(得分:0)

我真的很喜欢您的解决方案,杰森。您可以稍后通过生成的列表的索引引用按钮。

您还可以按照以下步骤创建按钮

for col in range(3):                          
    globals()["curRad" + str(col)] = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)

在这种情况下,与每个按钮关联的变量的名称将不同:

curRad0

curRad1

curRad2