2015-09-17 73 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')