python中如何输出一段文字_如何捕获Python解释器的输出并显示在“文本”窗口小部件中?...

我假设使用“从解释器输出”,你的意思是写入控制台或终端窗口的输出,如使用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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值