2014-03-06 74 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(file,SIGNAL(「readyRead()」),self.blap) def blap(self): print「I SAW that change」 –

回答

0

A QFile沒有提供監視文件內容變化的機制。您需要使用QFileSystemWatcher來獲得有關文件更改的通知。您還需要明智地處理您可能會讀取文件末尾部分行的事實。

如果您使用fileChanged信號,並且addPath返回True,請確保您給出文件(而非文件夾)的路徑。

您可以嘗試監控文件路徑和目錄路徑 - 在某些系統上,一個系統將工作,另一個系統將失敗。

如果你在Unix系統以外的OS X,你可以簡單地通知文件系統守護進程關閉(如果這樣是必要的),或通知關閉給定文件系統等。正如你所看到的,這取決於工作的文件系統守望者充滿危險。如果觀察器失敗,則必須回滾輪詢文件大小和修改時間(不經常!)。

A QTextEdit在追加時效果不佳。您應該使用模型和QListView,而不是with some caveats

+0

對不起,這痛打......我知道有: –

+0

觀察家= QFileSystemWatcher() watcher.addPath( 'TMP') QObject.connect(守望者,信號( 「fileChanged()」),self.blap) –

+0

但仍沒有看到文件更改的信號。 (我還沒有想出如何在評論中格式化代碼 - 抱歉)。 –