2015-09-17 32 views
0

我有一个小脚本,用于生成随机数的条目小部件。每个人都需要一个StringVar(),因此我可以将文本分配给小部件。我怎么能创造这些作为循环的一部分,因为我不会提前知道会有多少?在循环中为Tkinter条目构件创建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() 
+1

您是否意识到您不必在条目窗口小部件中使用'StringVar'?除非你为多个小部件使用同一个变量,否则根本不需要它们。 –

+0

我建议在['Entry' API](http://effbot.org/tkinterbook/entry.htm)上采集一个战利品,特别是关于'delete'和'insert'的部分。 – TigerhawkT3

回答

3

直接回答你的问题是使用列表或字典存储的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) 

可以插入或与方法insertdelete删除数据,并与get获得的价值:

for i in range(height): 
    value = entries[i].get() 
    print "value of entry %s is %s" % (i, value) 
2

只是将它们存储在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')