在 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
在一本关于 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