Python, PyQt5. Как в textEdit вывести все данные, а не последний результат поиска
Пишу программу, которая выполняет поиск в active directory с GUI собранном в pyQt5.
Загвоздка вот в чем - когда я выполняю поиск, например, по фамилии(а с такой фамилией несколько учеток), то мне отбражаеться только последнее значение в виджете textEdit.
А вот если я выполняю вывод всех значений(в коде экранированная строчка), то мне выдает все учетные записи с такой фамилией.
Что я сделал не так? Как мне вывести все учетки с одинаковой фамилией с выбранными мной атрибутами?
Кусочек кода (функция поиска по фамилии):
def surname_search(self):
user_surname=self.ui.lineEdit_2.text()
search_attributes='(anr='+user_surname+')'
conn.search(ad_search_tree,search_attributes,SUBTREE,attributes =
['cn','GivenName','SN','sAMAccountName', 'displayName',
'telephoneNumber', 'mail','employeeID',
'initials','distinguishedName','memberOf'])
for entry in conn.entries:
self.ui.textEdit.setPlainText(str(entry.SN)+"
"+str(entry.GivenName)+" "+ str(entry.initials)+"\n"
+'логин: '+str(entry.cn)+'\n'
+'таб.№: '+ str(entry.employeeID)+'\n'
+'почта: '+str(entry.mail)+'\n'
+'тел.'+str(entry.telephoneNumber)+'\n'
+str(entry.distinguishedName))
#self.ui.textEdit.setPlainText(str(conn.entries))
self.ui.lineEdit_2.clear()
Ответы (1 шт):
Метод setPlainText удаляет предыдущее содержимое и вставляет новое, поэтому код ниже всегда показывает последний результат:
for entry in conn.entries:
self.ui.textEdit.setPlainText(str(entry.SN)+"
...
Используйте метод append:
for entry in conn.entries:
self.ui.textEdit.append(str(entry.SN)+"
...
PS.
Советую не использовать конкатенацию строк для параметров, эффективнее и красивее сделать через форматирование строки.
Сравните это:
self.ui.textEdit.setPlainText(str(entry.SN)+"
"+str(entry.GivenName)+" "+ str(entry.initials)+"\n"
+'логин: '+str(entry.cn)+'\n'
+'таб.№: '+ str(entry.employeeID)+'\n'
+'почта: '+str(entry.mail)+'\n'
+'тел.'+str(entry.telephoneNumber)+'\n'
+str(entry.distinguishedName))
с (f-string, для python 3.6 и выше):
self.ui.textEdit.setPlainText(
f"{entry.SN} {entry.GivenName} {entry.initials}\nлогин: {entry.cn}\n"
f"таб.№: {entry.employeeID}\nпочта: {entry.mail}\nтел. {entry.telephoneNumber}"
f"\n{entry.distinguishedName}"
)
Для python 3.5 и ниже, используется str.format