PyQt5学习笔记(8) 将python控制台输出打印到Qtextedit

本文记录了如何在PyQt5应用中将Python的控制台输出重定向到QTextEdit组件,方便在GUI界面中查看程序运行信息。通过自定义StreamBuffer类实现这一功能,详细代码见正文。
摘要由CSDN通过智能技术生成
# time.sleep(5)  # time.sleep()是一个阻塞任务,不允许Qt事件循环运行,从而阻止信号正常工作和GUI更新,运行时会等5s后打印所有信息。

解决方案是使用QTimer和QEventLoop替换该GUI睡眠。

self.timer = QTimer(self) #初始化一个定时器
self.timer.timeout.connect(self.fun) #计时结束调用operate()方法
self.timer.start(1000) #设置计时间隔并启动

 

完整代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2019/11/17 20:08
# @Author  : dailinqing
# @Email   : dailinqing@126.com
# @File    : print_to_ui.py
# @Software: PyCharm

import sys
import time
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QTextEdit
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import QThread,QTimer




class Stream(QtCore.QObject):
    """Redirects console output to text widget."""
    newText = QtCore.pyqtSignal(str)

    def write(self, text):
        self.newText.emit(
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
可以使用QThread将cmd窗口的输出打印QTextEdit窗口中,避免阻塞主线程。 下面是一个简单的示例代码: ```python from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit import subprocess class CmdThread(QThread): update_signal = pyqtSignal(str) def __init__(self, cmd): super().__init__() self.cmd = cmd def run(self): proc = subprocess.Popen(self.cmd, shell=True, stdout=subprocess.PIPE) for line in iter(proc.stdout.readline, b''): self.update_signal.emit(line.decode('utf-8')) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.text_edit = QTextEdit() self.setCentralWidget(self.text_edit) self.cmd_thread = CmdThread('dir') # 以dir命令为例 self.cmd_thread.update_signal.connect(self.update_text_edit) self.cmd_thread.start() def update_text_edit(self, text): self.text_edit.insertPlainText(text) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个示例中,我们创建了一个继承自QThread的CmdThread类,用于运行cmd命令并将输出通过pyqtSignal信号传递给主线程。在主线程中,我们创建了一个QTextEdit窗口,并在初始化时启动了CmdThread线程,并将其输出连接到update_text_edit函数中,用于将输出文本插入到QTextEdit窗口中。 在这个示例中,我们使用了subprocess模块来运行cmd命令,并使用了iter函数和readline方法来逐行读取输出。在每行输出后,我们使用emit方法发送一个pyqtSignal信号,并将输出文本作为参数传递给这个信号。在主线程中,我们将这个信号连接到update_text_edit函数中,并在函数中使用insertPlainText方法将输出文本插入到QTextEdit窗口中。 这样,我们就可以实现将cmd窗口的输出快速连续地打印QTextEdit窗口中,而且不会产生阻塞。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dailinqing1984

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值