что не так в моей функции, которая не анализирует содержание зала файла JSON с помощью Python - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть функция, которая читает файл JSON и отображает содержимое в QtextEdit с использованием Pyqt5.

Проблема в том, что при попытке проанализировать содержимое в TextEdit отображается последняя запись имени файла.

в то время как если я печатаю на консоль, все записи имени файла печатаются как следует.

в конце мне нужно отобразить результат как комментарий print

def displayReport(self,item):
        searchRes=os.path.join(os.getcwd(),"search_result")
        path = os.listdir(searchRes)
        data =[]
        try:
            for file in path:            
                rpjson = json.load(open(os.path.join(searchRes,item)))
                for js in rpjson:
                    fileName = js["File Name"]
                    srchwRD = js["Searched Word"]
                    nbrOfOccur = str(js["Number Of Occurence"])
                    result = [fileName + srchwRD + nbrOfOccur]

                    print("this is file name {}".format(fileName))

                    data.append(result)


                    #print("****************" + "\n" + "File Name: " + 
                                          #js["File Name"] + "\n" + "Searched Word: " +
                                          #js["Searched Word"] + "\n" + "Number Of Occurence: " +
                                          #str(js["Number Of Occurence"]))

        except Exception as e:
            print("can't read JSON because {}".format(e))

        self.textEdit.setHtml("\n".join (data))        

1 Ответ

0 голосов
/ 28 апреля 2018

Вы не «добавляете» к textedit, вместо этого вы заменяете его содержимое на каждой итерации цикла - только последний контент вставляет .

Изменение

self.textEdit.setHtml(str(fileName)) # replaces the whole content of the qtestedit

для добавления в текущий контент вместо его замены.

Возможные решения

См. Этот пост SO: Как добавить текст в QPlainTextEdit без добавления новой строки и сохранить прокрутку внизу? , как этого добиться. (возможно, вам следует добавить новую строку между именами файлов - вы можете адаптировать решения).

Может быть, лучший способ сделать это:

  • Посмотрите на API, append также может быть правильным выбором: QTextEdit.append (...)

  • собрать весь необходимый текст в обычный список строк и установить QTextEdit только один раз после того, как вы посетили все файлы. Это должно быть быстрее, так как Qt не обновляет свой элемент несколько раз и должен обрабатывать триггеры и сигналы на нем:


def displayReport(self,item):  # code untested, no mvce provided, may need small fixup(s)
    foundText = []
    searchRes=os.path.join(os.getcwd(),"search_result")
    path = os.listdir(searchRes)
    try:
        for file in path:            
            rpjson = json.load(open(os.path.join(searchRes,item)))
            for js in rpjson:
                fileName = js["File Name"]
                print("this is file name {}".format(fileName))

                foundText.append(fileName)   # add to list, join later, faster then
                                             # add to the immutable string multiple times
    except Exception as e:
             print("can't read JSON because {}".format(e))

    self.textEdit.setHtml('\n'.join(foundText))  # set text only once after processing

Вероятно, я бы выбрал последний вариант (сбор в список + установка один раз), поскольку он минимизирует сигналы и триггеры.

...