私はこの答えを自分のコードに実装しました。ただし、 の接続を介してメソッドを実行しておりQPushButton
、このメソッドで何が起こるかを GUI にパイプしたいと考えています。
ボタンを初めてクリックstdout
すると、インタープリターウィンドウに表示されます。ただし、その後ボタンを押すと、 がstdout
表示されますQTextEdit
- print ステートメントまたは にはQPushButton
、理解できない複雑さがあると思います - コードの変更を開始する必要がある場所を誰かが教えてくれれば、永遠に感謝します!
これは、問題を示すために使用できる最小量のコードだと思います..
import os, sys
from PyQt4 import QtCore, QtGui
def main():
app = QtGui.QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
class MyWindow(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
self.runBtn = QtGui.QPushButton('Run!', self)
self.runBtn.clicked.connect(self.runCmd)
self.te = QtGui.QTextEdit()
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.runBtn)
layout.addWidget(self.te)
self.setLayout(layout)
def runCmd(self):
print "here"
print sys.stdout
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
def __del__(self):
sys.stdout = sys.__stdout__
def normalOutputWritten(self, text):
cursor = self.te.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.te.setTextCursor(cursor)
self.te.ensureCursorVisible()
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
if __name__ == "__main__":
main()