Python生成器返回最后一项

2024-09-30 05:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遍历一个CSV文件,从每一行获取一个项目,并将其插入GUI中的QLineEdit。在

当我单击按钮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']

我已经用下面的方法进行了测试,它得到了第一个电子邮件地址,但是按next不会将它更改为下一行的电子邮件地址。在

^{pr2}$

Tags: 文件csvinselffor电子邮件email地址
1条回答
网友
1楼 · 发布于 2024-09-30 05:19:55

你是正确的循环和屈服。在

你要做的是正确使用结果:

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

将替换任何先前的文本值每次循环迭代。这就是您只看到最后一个值的原因;之前对self.toField.setText()的所有调用都成功了,但是接下来的迭代将再次覆盖这些调用。在

您需要将附加到QLineEdit小部件中的现有文本。我建议您使用.insert()方法:

^{pr2}$

如果要将项目逐个分配给用户事件字段,请在每次需要新地址时调用next()on self.emailGenerator

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

而不是绕着它转。如果电子邮件地址已用完,上面的示例行将字段设置为''。在

相关问题 更多 >

    热门问题