0

我有以下代码可以工作并给我每个值。一旦收集到所有值,我似乎无法创建它们的列表。我目前一次只获得一个价值..!我尝试了以下两种方法:

def numberwritten(self, event, key, index):
    self.values = []
    if not self.left[index]:
        self.box[key].config(fg='black')
        self.left[index] = True
        self.values.append(self.box[key].get())
        print self.values

这适用于每次只打印一个值,但我想要一个可以分配“n”个变量的列表(每次获得的值的数量随机变化)。

例如,我想做 'Value %s" % i = 获得的值。

4

2 回答 2

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
于 2012-07-12T12:16:41.803 回答
0

self.values = []每次调用时都会清除列表numberwritten(),这就是您只打印一个值的原因。self.values全局声明或在__init__()类中的函数中声明。

在每次循环迭代期间打印一个值的格式方面,请尝试以下操作:

print("Value %i = %s" % (index, self.box[key].get())

编辑:如果您真的想在每次循环迭代中打印整个列表,我从这个答案中借用了以下内容:

# Map items in self.values to strings (necessary if they are not strings).
print("All values: [%s]" % ", ".join(map(str, self.values)))

# Use this if the contents of self.values are strings.
print("All values: [%s]" % ", ".join(self.values))   
于 2012-07-12T12:11:10.387 回答