您正在创建小部件行。每行可能比其他行有更多或更少的小部件。在某些时候,您需要获得一个代表每行数据的列表。你在问,“我如何得到这个列表?”。我对么?
关于这个简单的问题,你一定问了 20 个问题。问题不在于这个或任何其他单一功能,而在于您的一般架构。一位非常非常聪明的程序员曾经告诉我“如果你想让我理解你的代码,不要给我看你的代码,给我看你的数据结构”。这里的根本问题是,您没有数据结构。如果你不组织你的数据,你就不能希望轻松地获取数据。
这个问题没什么难的。为每一行保留一个条目小部件列表,并在需要值时迭代该列表。以下伪代码显示了这有多简单:
class MyApp(object):
def __init__(self):
# this represents your data model. Each item in the
# dict will represent one row, with the key being the
# row number
self.model = {}
def add_row(self, parent, row_number):
'''Create a new row'''
e1 = Entry(parent, ...)
e2 = Entry(parent, ...)
e3 = Entry(parent, ...)
...
# save the widgets to our model
self.model[row_number] = [e1, e2, e3]
def extend_row(self, parent, row_number, n):
'''Add additional widgets to a row'''
for i in range(n):
e = Entry(parent, ...)
self.model[row_number].append(e)
def get_values(row_number):
'''Return the values in the widgets for a row, in order'''
result = [widget.get() for widget in self.model[row_number]]
return result