【问题标题】:Creating StringVar Variables in a Loop for Tkinter Entry Widgets在循环中为 Tkinter 条目小部件创建 StringVar 变量
【发布时间】:2015-12-14 21:45:25
【问题描述】:

我有一个小脚本,可以生成随机数量的条目小部件。每个都需要一个 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()

【问题讨论】:

  • 您知道您不必将StringVars 与条目小部件一起使用吗?除非您对多个小部件使用相同的变量,否则您根本不需要它们。
  • 我建议在Entry API,特别是关于deleteinsert的部分。

标签: python python-2.7 tkinter


【解决方案1】:

您问题的直接答案是使用列表或字典来存储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 或二维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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多