ウィジェットの行を作成しています。各行には、他の行よりも多いまたは少ないウィジェットが含まれる場合があります。ある時点で、各行のデータを表すリストを取得する必要があります。「このリストを取得するにはどうすればよいですか?」と質問しています。私は正しいですか?
この1つの単純な問題について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