嗨,我是PyQt的新手。 有人可以建议为什么下面的程序没有实时填充print.py的stdout到文本框小部件。当它从命令行运行时存在这个问题。如果我们在pycharm中运行相同的代码,我们将获得实时输出。命令行执行将数据显示为文本框的块(约4K)。
from PyQt4 import QtGui,QtCore
import sys
class gui(QtGui.QMainWindow):
def __init__(self):
super(gui, self).__init__()
self.initUI()
def dataReady(self):
cursor = self.output.textCursor()
cursor.movePosition(cursor.End)
cursor.insertText(str(self.process.readAll()))
self.output.ensureCursorVisible()
def initUI(self):
# Layout are better for placing widgets
layout = QtGui.QHBoxLayout()
self.output = QtGui.QTextEdit()
layout.addWidget(self.output)
centralWidget = QtGui.QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
# QProcess object for external app
self.process = QtCore.QProcess(self)
# QProcess emits `readyRead` when there is data to be read
self.process.readyRead.connect(self.dataReady)
# Run program
self.process.start('python', ['./print.py'])
#Function Main Start
def main():
app = QtGui.QApplication(sys.argv)
ui=gui()
ui.show()
sys.exit(app.exec_())
#Function Main END
if __name__ == '__main__':
main()
以下是print.py
的代码import time
n=10
while(n):
print "Hello world"
time.sleep(1)
n = n-1
答案 0 :(得分:1)
您应该显式刷新在子进程中运行的print.py脚本(子脚本)的输出缓冲区。 print
的默认行为是将输出发送到标准输出(stdout)。因此,您应该在每个print语句之后在子脚本中显式调用sys.sydout.flush()
,以确保子脚本中的print语句的内容及时可用于父脚本。