所以我知道如何使用get函数从单个条目小部件中检索文本,但现在我尝试使用for循环同时创建多个条目小部件。一旦用户输入文本,我怎样才能返回并从任何一个条目小部件中检索文本?
rows=11
for line in range(10):
rows=rows+1
widget = Tk.Entry(self.frame)
widget.grid(row=rows, column=5)
答案 0 :(得分:1)
widgets = []
for i in range(11, 23):
widgets.append(Tk.Entry(self.frame))
widget[i-11].grid(row = i, column = 5)
答案 1 :(得分:1)
问题在于,所有窗口小部件对象都被分配给引用,并且循环的每次下一次迭代都未被引用。解决此问题的方法是创建一个列表并将这些小部件添加到列表中:
entries = []
for line in range(10):
rows = rows + 1
widget = Tk.Entry(self.name)
widget.grid(row = rows, column = 5)
entries.append(widget) # Add this line to your code
现在,要访问特定的输入框,您只需在数组中找到它。因此,例如,第二个框将在entries[1]
找到(因为它基于0)。
答案 2 :(得分:1)
您遇到的根本问题是您没有任何类型的数据结构。您熟悉list
类型吗?
rows=11
entries = [Tk.Entry(self.frame) for item in range(10)]
for item in entries:
rows=rows+1
item.grid(row=row, column=5)
这会创建一个list
个Entry
小部件,然后将list
和grid
每个小部件连接成一行(从12
开始)。您可以按索引访问list
项,例如entries[0]
代表Entry
。
答案 3 :(得分:1)
要直接回答您的问题,您需要get()方法,该方法可用于Entry类。要获取窗口小部件对象的值,代码将如下所示:
myValue = widget.get()
请注意,正如其他人所说,你的" for"循环实际上不会创建10个Entry对象。由于您不断将新的Entry对象重新分配给变量" widget",因此您创建的旧Entry对象将被取消引用。而不是将每个新的Entry对象分配给变量" widget"而是将它们附加到列表中。