在 for 循环中创建几个 tkinter 小部件并将它们分配给变量
Posted
技术标签:
【中文标题】在 for 循环中创建几个 tkinter 小部件并将它们分配给变量【英文标题】:Creating several tkinter widgets in a for loop and assigning them to variables 【发布时间】:2017-11-04 10:27:27 【问题描述】:在一本关于 Python/tkinter 的食谱书中,我发现了这个关于如何在一个循环中创建三个 Radiobutton 小部件的 sn-p:
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 是否以某种方式在每次迭代中创建自定义命名的变量?对我来说,看起来我们正在将一个字符串分配给一个变量,然后将一个小部件的引用分配给同一个变量,并且在每次迭代时都做同样的事情。
我在这里错过了什么?
【问题讨论】:
【参考方案1】:我真的很喜欢你的解决方案,杰森。您可以稍后通过生成的列表的索引来引用按钮。
您也可以按如下方式创建按钮
for col in range(3):
globals()["curRad" + str(col)] = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
所以与每个按钮关联的变量的名称会有所不同,在这种情况下:
curRad0
curRad1
curRad2
【讨论】:
【参考方案2】:curRad = 'rad' + str(col)
行完全没有任何作用,因为变量在下一行被重新分配。
该代码不会为您提供对单个单选按钮的任何持久引用 - 但您通常不需要一个:确定选择哪个单选按钮,或以编程方式选择一个单选按钮,是通过它们的变量 (radVar
) 完成的全部分享。
如果您真的想保留对每个按钮的引用,您可以输入:
allRads = []
在循环之上,并且:
allRads.append(curRad)
在循环内部。
【讨论】:
以上是关于在 for 循环中创建几个 tkinter 小部件并将它们分配给变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?