我正在尝试遍历CSV文件并从每行获取一个项目并将其插入GUI中的QLineEdit
。
当我点击按钮self.nextAppointment
时,它会填充该字段,但始终使用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())
答案 0 :(得分: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, ''))
而不是循环它。如果您的电子邮件地址不足,上面的示例行会将字段设置为''
。