2014-03-06 53 views
0

stackoverflow에 '비슷한'질문이 있지만 구현할 수 없습니다. pyqt에서 QTextEdit 위젯으로 실시간 업데이트중인 로그 파일의 출력을 파이프 처리하려고합니다. 내가 지금까지 가지고있는 코드는 다음과 같습니다로그 출력을 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에 직접 쓸 것을 경고합니다.

+0

QIODevice (따라서 QFile)에는 연결할 수있는 readyRead() 신호가 있습니다. –

+0

위의 코드에 다음을 추가했습니다. –

+0

QObject.connect (파일, SIGNAL ("readyRead()"), self.blap) def blap (self) : print "나는 변경합니다" –

답변

0

QFile은 파일 내용의 변경을 모니터링하는 메커니즘을 제공하지 않습니다. 파일 변경 사항에 대한 알림을 받으려면 QFileSystemWatcher을 사용해야합니다. 또한 파일의 끝에 부분 행을 읽을 수 있다는 사실을 지능적으로 처리해야합니다.

fileChanged 신호를 사용하고 addPath이 True를 반환하는 경우 파일 (폴더가 아님)에 대한 경로를 지정해야합니다.

파일 경로와 디렉터리 경로를 모두 모니터링 해 볼 수 있습니다. 일부 시스템에서는 다른 시스템이 작동하지 않을 때 작동합니다.

OS X 이외의 Unix를 사용하는 경우 파일 시스템 알림 데몬을 끄거나 (필요한 경우) 주어진 파일 시스템에 대해 알림을 해제 할 수 있습니다. 알다시피, 작업 파일 시스템 감시인은 위험에 처해있다. 감시자가 실패하면 파일 크기와 수정 시간을 폴링하는 폴백 (fallback)을해야한다.

QTextEdit은 첨부 할 때 성능이 다소 떨어집니다. 대신 모델 QListView (with some caveats)을 사용해야합니다.

+0

이 장황해서 죄송합니다 ... 내가 알고 있습니다 –

+0

감시자 = QFileSystemWatcher() watcher.addPath ('TMP') QObject.connect (감시자, SIGNAL ("fileChanged()"), self.blap) –

+0

하지만 여전히 파일 변경시 신호가 표시되지 않습니다. (나는 또한 코멘트에서 코드를 포맷하는 방법을 아직 생각하지 못했다. - 미안). –