0

我正在尝试遍历 CSV 文件并从每一行中获取一个项目并将其插入QLineEditGUI 中。

当我单击该按钮self.nextAppointment时,它会填充该字段,但始终使用 CSV 文件中最后一行的电子邮件地址。随后单击该按钮似乎没有做任何事情。

我在想我没有正确创建/使用生成器,但我不确定。

如何循环遍历 CSV 文件并获取我想要返回的字段,以便我可以一次将其放入 GUI 中,用于 CSV 的每一行。

以下是相关代码:

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')

如果您想将项目一一分配到您的用户事件字段,请next()self.emailGenerator每次需要新地址时调用:

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

而不是循环它。''如果您的电子邮件地址用完,上面的示例行将该字段设置为。

于 2013-07-12T15:03:30.493 回答