我假设使用“从解释器输出”,你的意思是写入控制台或终端窗口的输出,如使用print()生成的输出.
由Python生成的所有控制台输出都将写入程序的输出流sys.stdout(正常输出)和sys.stderr(错误输出,如异常追溯).这些是类似文件的对象.
您可以用自己的文件对象替换这些流.所有您的自定义实现必须提供的是一个写(文本)功能.通过提供自己的实现,您可以将所有输出转发到您的小部件:
class MyStream(object):
def write(self, text):
# Add text to a QTextEdit...
sys.stdout = MyStream()
sys.stderr = MyStream()
如果你需要重新设置这些流,它们仍然可以作为sys .__ stdout__和sys .__ stderr__使用:
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
更新
这是PyQt4的一些工作代码.首先定义一个报告用Qt信号写入数据的流:
from PyQt4 import QtCore
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
现在,在GUI中,将此流的实例安装到sys.stdout,并将textWritten信号连接到将文本写入QTextEdit的插槽:
# Within your main window class...
def __init__(self, parent=None, **kwargs):
# ...
# Install the custom output stream
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
def __del__(self):
# Restore sys.stdout
sys.stdout = sys.__stdout__
def normalOutputWritten(self, text):
"""Append text to the QTextEdit."""
# Maybe QTextEdit.append() works as well, but this is how I do it:
cursor = self.textEdit.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.textEdit.setTextCursor(cursor)
self.textEdit.ensureCursorVisible()