Передача вывода журнала в виджет QTextEdit

В stackru есть несколько "похожих" вопросов, но я не могу их полностью реализовать. В pyqt я пытаюсь передать вывод файла журнала (который обновляется в реальном времени) в виджет QTextEdit. Код, который у меня пока есть:

    file = QFile('tmp')
    fh = file.open(QIODevice.ReadOnly)
    stream = QTextStream(file)
    while not stream.atEnd():
        line = stream.readLine()
        self.logTextEdit.append(line)
    file.close()

который обрабатывает текущее содержимое, но не любые последующие изменения. В идеале, сигнал Qt предупредил бы меня прочитать другую строку, когда она доступна, и записать ее непосредственно в TextEdit.

1 ответ

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

Убедитесь, что вы указали путь к файлу (не к папке), если вы используете fileChanged сигнал, и это addPath возвращает True.

Вы можете попытаться отслеживать как путь к файлу, так и путь к каталогу - в некоторых системах одна будет работать, а другая - не удастся.

Если вы работаете в Unices, кроме OS X, вы можете просто отключить демоны уведомлений файловой системы (если таковые необходимы) или отключить уведомления для данной файловой системы и т. Д. Как вы можете видеть, в зависимости от работающей файловой системы наблюдатель чреват Опасность. В случае сбоя наблюдателя у вас должен быть запасной вариант опроса размера файла и времени модификации (не очень часто!).

QTextEdit довольно плохо работает при добавлении. Вы должны использовать модель и QListView вместо этого, с некоторыми оговорками.

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