【问题标题】:Best way to create multiple variables for widgets为小部件创建多个变量的最佳方法
【发布时间】:2017-01-01 19:16:49
【问题描述】:

我正在尝试做一些将使用类似小部件的应用程序,这是我的 Entry 小部件的创建方式:

        self.entries = []

    for number in range(10):
        name = "Group {}".format(number)
        self.entries.append((name, tkinter.Entry(self.parent, width=55, state= "readonly", readonlybackground= "#ccdeea")))

我已将小部件放入列表中,该列表中的每个对象都包含条目名称和小部件。

问题是如何为这个小部件将使用的每个条目变量制作?

提前谢谢你。

【问题讨论】:

  • 如果您只有一个 Widget,您将如何指定变量?
  • matchedVariable = tkinter.StringVar() self.entries.append(("Matched", tkinter.Entry(self.parent, width= 55, state="disabled", disabledbackground="white", textvariable=matchedVariable)))matchedVariable.set("Setting new str")
  • 您知道条目小部件不需要变量吗?我的建议:不要创建变量。
  • 那么是什么阻止您将变量以及名称和条目添加到self.entries?或者也许将其添加到不同的列表中,如果这样更方便?
  • 入口小部件有一个insertdeleteget方法用于设置、删除和检索小部件的内容。这些方法都有记录。

标签: python tkinter


【解决方案1】:

你不需要名字

您可以创建包含条目的列表

self.entries = []

for _ in range(10):
    entry = tkinter.Entry(self.parent, ...)
    self.entries.append(entry)

以后使用

print( self.entries[0].get() )
print( self.entries[1].get() )
# ...

for x in range(10):
    print( self.entries[x].get() )

如果你必须使用StringVar(),那么你仍然不需要名字

self.vars = []

for _ in range(10):
    var = tkinter.StringVar()
    tkinter.Entry(self.parent, textvariable=var)
    self.vars.append(var)

以后使用

print( self.vars[0].get() )
print( self.vars[1].get() )
# ...

for x in range(10):
    print( self.vars[x].get() )

如果你真的需要一些名字,使用字典

self.entries = {}

for x in range(10):
    self.entries['Group {}'.format(x)] = tkinter.Entry(self.parent, ...)

以后你可以使用

self.entries['Group 0'].get()
self.entries['Group 1'].get()
# ...

但要使用for,您将需要再次使用format()

for x in range(10):
    print( self.entries['Group {}'.format(x)].get() )

这毫无意义。

【讨论】:

  • 感谢您的意见,现在很清楚了。名称只是为了让用户更容易阅读代码,因为列表包含人类可读的名称。
猜你喜欢
  • 2021-10-15
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多