栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何捕获Python解释器的输出并在Text小部件中显示?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何捕获Python解释器的输出并在Text小部件中显示?

我假设“来自解释器的输出”是指写入控制台或终端窗口的输出,例如使用产生的输出

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 QtCoreclass 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()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号