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

Creating several tkinter widgets in a for loop and assigning them to variables

在一本关于 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 用作例如列表,最终包含对所有这些单选按钮的引用。这里发生了什么? Python 是否在每次迭代时以某种方式创建自定义命名的变量?对我来说,看起来我们正在将一个字符串分配给一个变量,然后将对一个小部件的引用分配给同一个变量,并且在每次迭代中都做同样的事情。

我在这里错过了什么?

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

该代码不会为您提供对单个单选按钮的任何持久引用 - 但您通常不需要一个:确定选择哪个按钮或以编程方式选择一个按钮是通过变量 (radVar) 他们都共享。

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

allRads = []

在循环之上,并且:

allRads.append(curRad)

循环内部。

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

您还可以创建如下按钮

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

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

curRad0

curRad1

curRad2