# 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()
5条答案
按热度按时间jtw3ybtb1#
不幸的是,这个例子不适用于PySide。它给出了以下错误:
字符串
我们需要进行以下更改以使其与PySide一起使用:
型
dtcbnfnu2#
我建议你使用日志库。http://docs.python.org/library/logging.html你可以编写自己的日志处理程序来与QTextEdit通信。这里有一个很好的教程可以让你开始:http://pantburk.info/?blog=77
o7jaxewo3#
不久前,我发布了一些关于PySide的终端应用程序的东西,比如PySide中的终端应用程序。如果你正在看PyQt,那么也检查一下PySide。它们基本上是一样的,除了许可证和语法上的一些差异。
bxgwgixi4#
感谢Ferdinand和Tommy。我已经发布了我的PySide6新窗口解决方案,因为这个线程经常出现在搜索中。当我有一个QThread在后台做一堆事情时,我想创建一个“加载”窗口。我在启动线程时创建这个窗口,然后在线程完成时连接。close()。我从不同的SO Q&答:我可以从Windows终端运行我的GUI,在终端中看到通常的stdout,调用我的加载线程函数,窗口弹出,stdout转到窗口,然后当它完成时,窗口关闭,stdout返回到终端。
字符串
yqkkidmi5#
我假设“解释器的输出”是指写入控制台或终端窗口的输出,例如使用
print()
生成的输出。Python生成的所有控制台输出都被写入程序的输出流
sys.stdout
(正常输出)和sys.stderr
(错误输出,如异常跟踪)。这些都是类似文件的对象。你可以用你自己的类文件对象替换这些流。你的自定义实现只需要提供一个
write(text)
函数。通过提供你自己的实现,你可以将所有输出转发到你的小部件:字符串
如果您需要重置这些流,它们仍然可以作为
sys.__stdout__
和sys.__stderr__
使用:型
更新
下面是PyQt4的一些工作代码。首先定义一个流,用Qt信号报告写入其中的数据:
型
现在,在您的GUI中,将此流的示例安装到
sys.stdout
,并将textWritten
信号连接到将文本写入QTextEdit
的插槽:型