3 回答

TA貢獻1777條經驗 獲得超3個贊
我假設“來自解釋器的輸出”是指寫入控制臺或終端窗口的輸出,例如使用產生的輸出print()。
Python產生的所有控制臺輸出都被寫入程序的輸出流sys.stdout(正常輸出)和sys.stderr(錯誤輸出,例如異?;厮荩_@些是類似文件的對象。
您可以將這些流替換為您自己的類似文件的對象。您的所有自定義實現都必須提供一個write(text)函數。通過提供自己的實現,您可以將所有輸出轉發到您的小部件:
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()
添加回答
舉報