您正在創建小部件的行。每行可能具有比其他行更多或更少的小部件。在某些時候,你需要得到一個代表每行數據的列表。你在問,「我怎麼得到這個清單?」。我對麼?
您一定要問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
在我看來,你的格式化字符串是錯誤的,因爲參數的數量不符合說明符的數量。看看Python文檔(http://docs.python.org/library/stdtypes.html#string-formatting-operations)並嘗試擺弄你的打印語句。 – 2012-07-12 07:22:08
感謝您的鏈接,但我似乎無法得到它的工作,因爲我需要等待,直到我的所有箱子都被填充.. = S – user2063 2012-07-12 08:37:04
我改變了我的方法,因爲我知道另一種方式至少有一個值的工作。 – user2063 2012-07-12 09:14:32