理解一段Python代码

4

我的问题涉及到如何捕获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.normalOutputWrittentextWritten信号连接到normalOutputWritten插槽,但我不理解为什么这样可以工作。

你不明白这个的哪一部分呢?它非常简单,你只需要传递一个函数引用,然后EmittingStream构造函数(继承自QtCore.QObject)将其连接到信号上。 - l4mpi
@l4mpi: 那正是我需要知道的,我没有想到这种行为只是由于QObject的构造函数。 - jan
1个回答

1
这个功能在这里有文档记录:

还可以通过将槽作为关键字参数传递来连接信号,该关键字参数对应于创建对象时信号的名称,或者使用QObject的pyqtConfigure()方法。例如,以下三个片段是等价的:

act = QtGui.QAction("Action", self)
act.triggered.connect(self.on_triggered)

act = QtGui.QAction("Action", self, triggered=self.on_triggered)

act = QtGui.QAction("Action", self)
act.pyqtConfigure(triggered=self.on_triggered)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接