【发布时间】:2014-03-06 20:15:09
【问题描述】:
stackoverflow 中有一些“类似”的问题,但无法完全实现。在 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。
【问题讨论】:
-
QIODevice(以及 QFile)有一个 readyRead() 信号,你可以连接到。
-
我在上面的代码中添加了以下内容:
-
QObject.connect(file, SIGNAL("readyRead()"), self.blap) def blap(self): print "I SAW that change"
-
我也尝试过 'bytesWritten() 信号。我删除了file.close,以防万一。然后我在命令行做了: echo 'foo'>> tmp 但它没有触发信号。我错过了什么?
-
@FrankOsterfeld
QFile在其他人修改文件时不会发出此类信号。事实上,QFile不会发出任何信号周期。是的,它有它们,但从不发出它们。您真的不希望它默认发生,因为在许多系统上,文件更改通知非常昂贵,并且您会为通过 QFile 打开的每个文件支付这个价格。在实践中,那将是非常非常糟糕。就我而言,运行带有大量打开文件的 Qt 应用程序对它们运行的机器来说是一个很好的拒绝服务:)
标签: qt qtextedit qiodevice qtextstream