首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 17:02
  • 2894
  • 7402
blog.csdn.net
  • 专栏:Python基础教程目录
  • 专栏:使用PyQt开发图形界面Python应用
  • 专栏:PyQt入门学习
  • 老猿Python博文目录

《在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法》介绍了Python实现重定向的方法,在PyQt程序中,可以在上文的基础上,将标准输出信息输出重定向到类似QTextBrowser、QLineEdit、QLabel等图形界面对象上。

实现步骤如下:

  1. 备份标准输出sys.stdout、stderr对象,以便恢复或做其他处理;
  2. 在主界面派生类或其他图像界面派生类中定义write方法
    Python判断对象是否支持文件IO,是个典型的鸭子类型处理方式,就是看对象是否实现了读写方法,由于标准输出无需读只需写,因此只要在图形界面派生类实现了write方法后即可使用该图形界面类的实例替代标准输出即可
  3. 在图形界面派生类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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

以上方法不但能捕获自己实现代码的输出到图形界面中,还能将第三方模块输出信息也捕获到图形界面中。具体可以参考《第15.40节、PyQt(Python+Qt)实战:moviepy实现MP4视频转gif动图的工具》

老猿Python,跟老猿学Python!

  • 专栏:Python基础教程目录
  • 专栏:使用PyQt开发图形界面Python应用
  • 专栏:PyQt入门学习
  • 老猿Python博文目录
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333581 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/105317746"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top