PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象
《在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法》介绍了Python实现重定向的方法,在PyQt程序中,可以在上文的基础上,将标准输出信息输出重定向到类似QTextBrowser、QLineEdit、QLabel等图形界面对象上。
实现步骤如下:
- 备份标准输出sys.stdout、stderr对象,以便恢复或做其他处理;
 - 在主界面派生类或其他图像界面派生类中定义write方法
Python判断对象是否支持文件IO,是个典型的鸭子类型处理方式,就是看对象是否实现了读写方法,由于标准输出无需读只需写,因此只要在图形界面派生类实现了write方法后即可使用该图形界面类的实例替代标准输出即可 - 在图形界面派生类write方法中将要输出信息输出到图形界面类子对象中
在此需要注意,输出到图形对象的信息在程序输出过程中可能不会即时显示,导致给人的感觉是没有输出一样,为了确保输出信息即时显示需要在write方法中主动调用应用的processEvents方法。 
示例代码:
class mainWin(QtWidgets.QWidget,ui_mainWin.Ui_mainWin):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.stdoutbak = sys.stdout
        self.stderrbak = sys.stderr
        sys.stdout = self
	def write(self,info):
        self.proccessInf.insertPlainText(info)
        if len(str):self.currentInf.setText(str)
        QtWidgets.qApp.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents|QtCore.QEventLoop.ExcludeSocketNotifiers)
        self.stdoutbak.write(info)
	def restoreStd(self):
        print("准备恢复标准输出")
        sys.stdout = self.stdoutbak
        sys.stderr = self.stderrbak
        print("恢复标准输出完成")
	def __del__(self):
       self.restoreStd()
以上方法不但能捕获自己实现代码的输出到图形界面中,还能将第三方模块输出信息也捕获到图形界面中。具体可以参考《第15.40节、PyQt(Python+Qt)实战:moviepy实现MP4视频转gif动图的工具》

老猿Python,跟老猿学Python!
PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象的更多相关文章
- 在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法
		
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 Python中的标准输出和错误输出由sys模块的stdout.stde ...
 - PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法
		
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...
 - PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色
		
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...
 - PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题
		
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...
 - PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
		
老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...
 - PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响
		
老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系&g ...
 - PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系
		
老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑>中,老猿觉得dragE ...
 - PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项
		
老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...
 - PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性
		
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...
 
随机推荐
- 【Kata Daily 190927】Counting sheep...(数绵羊)
			
题目: Consider an array of sheep where some sheep may be missing from their place. We need a function ...
 - Android Google官方文档(cn)解析之——Intents and Intent filter
			
应用程序核心组件中的三个Activity,service,还有broadcast receiver都是通过一个叫做intent的消息激活的.Intent消息传送是在相同或不同的应用程序中的组件之间后运 ...
 - HTML+JavaScript实现一个简单抽奖功能
			
为什么会做这个东西呢,纯属好玩,闲的其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡先来看看页面效果吧:点击抽取就可以抽 ...
 - 理解js参数
			
<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title> ...
 - 栈(Stack)和队列(Queue)是两种操作受限的线性表。
			
(线性表:线性表是一种线性结构,它是一个含有n≥0个结点的有限序列,同一个线性表中的数据元素数据类型相同并且满足"一对一"的逻辑关系. "一对一"的逻辑关系指的 ...
 - UNP——第四章,TCP套接字编程
			
1.socket 函数 首先被调用的函数,用于选择通信协议. socket调用成功后,得到的套接字为主动套接字CLOSED状态. PF 和 AF 的关系 PF的是协议族,AF是地址族,理论上一个PF包 ...
 - 【转】CentOS7 64位安装mysql教程
			
从最新版本的linux系统开始,默认的是 Mariadb而不是mysql!这里依旧以mysql为例进行展示 1.先检查系统是否装有mysql rpm -qa | grep mysql 这里返回空值,说 ...
 - 网络协议_7层_TCP/IP
 - Qt For MacOs环境搭建
			
使用VMWARE关于macos镜像搭建,参考https://blog.csdn.net/u011415782/article/details/78505422 关于darwin8.5.5 来安装vmt ...
 - js常用通用函数
			
//判断是否数字 function isNumber(str){ var n = Number(str); if (!isNaN(n)){ return true; }else{ return fal ...