Передача вывода журнала в виджет 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
вместо этого, с некоторыми оговорками.