[英]Creating StringVar Variables in a Loop for Tkinter Entry Widgets
我有一个小脚本,可以生成随机数量的条目小部件。 每个人都需要一个StringVar(),所以我可以为小部件分配文本。 我如何创建这些作为循环的一部分,因为我不会提前知道将会有多少?
from Tkinter import *
import random
root = Tk()
a = StringVar()
height = random.randrange(0,5)
width = 1
for i in range(height): #Rows
value + i = StringVar()
for j in range(width): #Columns
b = Entry(root, text="", width=100, textvariable=value+i)
b.grid(row=i, column=j)
mainloop()
您问题的直接答案是使用列表或字典来存储StringVar
每个实例。
例如:
vars = []
for i in range(height):
var = StringVar()
vars.append(var)
b = Entry(..., textvariable=var)
但是,您不需要将StringVar
与条目小部件一起使用。 如果你想让两个小部件共享同一个变量,或者如果你在变量上做跟踪,那么StringVar
是好的,但是否则它们会增加开销而没有真正的好处。
entries = []
for i in range(height):
entry = Entry(root, width=100)
entries.append(entry)
您可以插入或删除与此方法的数据insert
和delete
,并获得与价值get
:
for i in range(height):
value = entries[i].get()
print "value of entry %s is %s" % (i, value)
只需将它们存储在list
。
vars = []
for i in range(height): #Rows
for j in range(width): #Columns
vars.append(StringVar())
b = Entry(root, text="", width=100, textvariable=vars[-1])
b.grid(row=i, column=j)
也就是说,您应该将Entry
小部件本身存储在list
或2D list
,如下所示:
entries = []
for i in range(height): #Rows
entries.append([])
for j in range(width): #Columns
entries[i].append(Entry(root, text="", width=100))
entries[i][j].grid(row=i, column=j)
然后,您可以使用insert()
方法为每个小部件分配文本:
entries[0][3].insert(0, 'hello')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.