0

私は次のコードを持っています。これは機能し、それぞれの値を与えてくれます。一度収集した値のリストを作成できないようです。現在、一度に1つの値を取得しています。私は次の2つの方法を試しました。

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

これは、毎回1つの値だけが出力される場合に機能しますが、「n」変数を割り当てることができるリストが必要です(取得される値の数は毎回ランダムに変化します)。

たとえば、'値%s "%i=取得した値を実行します。

4

2 に答える 2

1

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

この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()ため、1つの値だけを出力しています。self.valuesグローバルに、または__init__()クラスの関数で宣言します。

ループの反復ごとに1つの値を出力するためのフォーマットに関しては、次のようにしてみてください。

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 に答える