我的问题涉及到如何捕获Python解释器的输出并在文本小部件中显示的已接受答案,其中展示了如何将标准输出重定向到QTextEdit。
该作者 Ferdinand Beyer 定义了一个名为 EmittingStream 的类,其代码如下:
from PyQt4 import QtCore
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
他是这样使用该类的:
# 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()
我不明白实例化类的那行代码。看起来关键字参数textWritten=self.normalOutputWritten将textWritten信号连接到normalOutputWritten插槽,但我不理解为什么这样可以工作。
EmittingStream
构造函数(继承自QtCore.QObject
)将其连接到信号上。 - l4mpi