我有一个Python和PyQt的程序,设计用于在Windows上运行.

推荐答案

我假设"来自解释器的输出"是指写入控制台或终端窗口的输出,例如使用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__

Update

下面是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()

Python-3.x相关问答推荐

Python网页抓取:代码输出:汤未定义

使用Pandas 阅读Excel定义的名称和单元格值(&Q;)

循环遍历数据框以提取特定值

为什么在Python中使用RANDINT函数时会出现此TypeError?

泛型类型的参数的静态类型

与 pandas 0.22 相比,pandas 2.0.3 中的 df.replace() 会抛出 ValueError 错误

以特定方式重新排列 pandas 数据框的列

attrs 将 list[str] 转换为 list[float]

如何在Pandas 中按条件计算分组?

将字典列表展平为数据框列

使用一周的特定第一天将每日日期转换为每周

如何将具有多个参数的函数传递给 python concurrent.futures.ProcessPoolExecutor.map()?

Python从base64转换为二进制

smtplib 在 Python 3.1 中发送带有 unicode 字符的邮件的问题

简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中没有

Python中调用者函数的访问变量

如何使用 python 库连接到 poloniex.com websocket api

Pruning in Keras

为什么异步库比这个 I/O 绑定操作的线程慢?

在 Visual Studio Code 中调试 Scrapy 项目