2014-03-06 76 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

但仍没有看到文件更改的信号。 (我还没有想出如何在评论中格式化代码 - 抱歉)。 –