PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象

您所在的位置:网站首页 python标准输出 PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象

PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象

2024-07-14 03:38| 来源: 网络整理| 查看: 265

专栏:Python基础教程目录专栏:使用PyQt开发图形界面Python应用专栏:PyQt入门学习老猿Python博文目录

《在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! 专栏:Python基础教程目录专栏:使用PyQt开发图形界面Python应用专栏:PyQt入门学习老猿Python博文目录


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3