0
こんにちは、私はPyQtの初心者です。 誰かが以下のプログラムがテキストボックスウィジェットにリアルタイムでprint.pyのstdoutを投入しない理由を提案することができますか?この問題はコマンドラインから実行しているときに存在します。pycharmでsamecodeを実行していると、コマンドラインを実行すると、データがテキストボックスにチャンク(約4K)として表示されます。ここで コマンドラインからPyQtプログラムを実行してもコンソール出力がリアルタイムでルーティングされない
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
print.pyでprintを呼び出すたびに、明示的に 'sys.stdout.flush()'で標準出力をフラッシュしようとしましたか? –
それはクールです...うまく動作します..! – ZeeBlue