Как получить все элементы, существующие в QlistWidget в PyQt5

У меня есть функция, которая отображает список файлов, существующих в выбранном каталоге, а затем пользователь вводит искомое слово, где программа считывает эти файлы в фоновом режиме, чтобы найти подходящее слово, в конце оно переопределяет существующий список, просто отображая файлы, содержащие соответствующее слово.

проблема в том, что в то время как цикл система отображает эту ошибку:

в то время как индекс

builtins.TypeError: объект типа 'int' не имеет len()

код:

def listFiles(self):

        readedFileList = []
        index = 0
        while index < len(self.listWidgetPDFlist.count()):
            readedFileList.append(self.listWidgetPDFlist.item(index))
        print(readedFileList)

        try:
            for file in readedFileList:

                with open(file) as lstf:
                    filesReaded = lstf.read()
                    print(filesReaded)
                return(filesReaded)

        except Exception as e:
            print("the selected file is not readble because :  {0}".format(e))     

1 ответ

Решение

count() возвращает количество элементов, так что это целое число, функция len() применяется только к итерируемым, а не целым числам, поэтому вы получите эту ошибку, плюс она не нужна. Вы должны сделать следующее:

def listFiles(self):
    readedFileList = [self.listWidgetPDFlist.item(i).text() for i in range(self.listWidgetPDFlist.count())]
    try:
        for file in readedFileList:
            with open(file) as lstf:
                filesReaded = lstf.read()
                print(filesReaded)
                # return(filesReaded)

    except Exception as e:
        print("the selected file is not readble because :  {0}".format(e)) 

Примечание: не используйте return, вы закончите цикл в первой итерации.

Другие вопросы по тегам