0

CSV ファイルをループして各行から項目を取得QLineEditし、GUI に挿入しようとしています。

ボタンをクリックするself.nextAppointmentと、フィールドが入力されますが、常に CSV ファイルの最後の行の電子メール アドレスが表示されます。ボタンのその後のクリックは、何もしないように見えます。

ジェネレーターを正しく作成/使用していないと思いますが、よくわかりません。

CSV ファイルをループして、必要なフィールドを取得し、CSV の行ごとに一度に GUI に入れるにはどうすればよいですか。

関連するコードは次のとおりです。

self.nextAppointment.clicked.connect(self.nextFunction)

def nextFunction(self):
    self.emailGenerator = self.nextEmail()
    for email in self.emailGenerator:
        self.toField.setText(email)


def nextEmail(self):
    with open('assigned_appt_leads.csv', 'rb') as infile:
        rdr = csv.DictReader(infile, dialect='excel')
        for line in rdr:
            yield line['Email Address']

以下を使用してテストしたところ、最初の電子メール アドレスが取得されますが、[次へ] を押しても次の行の電子メール アドレスに変更されません。

def nextFunction(self):
    self.emailGenerator = self.nextEmail()
    self.toField.setText(self.emailGenerator.next())
4

1 に答える 1

1

あなたは正しくループして譲歩しています。

あなたがしていないのは、結果を正しく使用することです:

for email in self.emailGenerator:
    self.toField.setText(email)

ループの反復ごとに以前のテキスト値を置き換えます。これが、最後の値のみが表示される理由です。以前のすべての呼び出しはself.toField.setText()成功しましたが、次の反復によって再び上書きされました。

代わりに、ウィジェット内の既存のテキストに追加する必要があります。次の方法QLineEditを使用することをお勧めします。.insert()

for email in self.emailGenerator:
    self.toField.insert(email + '\n')

ユーザー イベントのフィールドに項目を 1 つずつ割り当てたい場合は、新しいアドレスが必要next()self.emailGeneratorなるたびに呼び出します。

self.toField.insert(next(self.emailGenerator, ''))

ループする代わりに。上記のサンプル行は、''メール アドレスが不足している場合にフィールドを に設定します。

于 2013-07-12T15:03:30.493 に答える