繁体   English   中英

在Tkinter Entry Widgets的循环中创建StringVar变量

[英]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)

您可以插入或删除与此方法的数据insertdelete ,并获得与价值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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM