我有一个小脚本,可以生成随机数量的条目小部件。每个人都需要一个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()
答案 0 :(得分:5)
您问题的直接答案是使用列表或字典来存储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)
答案 1 :(得分:3)
只需将它们存储在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')