当前位置: 首页 > 知识库问答 >
问题:

pyqt5 - 如何在PyQt5中实现持续显示的命令行日志输出功能?

李宜然
2024-07-22

如何在pyqt5上实现以下功能。
我想做一个日志输出的功能,把日志输出到命令行。
有日志就输出,没日志,命令行的弹窗就一直在那里。
如图
image.png

查了很多资料,不知道怎么描述这个。

共有1个答案

薛经纶
2024-07-22

在PyQt5中实现持续显示的命令行日志输出功能,通常意味着你希望将日志信息显示在GUI应用程序的某个部分(比如一个文本编辑框),而不是真正的命令行界面。但是,如果你确实想要将日志信息发送到系统的命令行,并在PyQt5应用程序中不展示特定的日志窗口,那么你可以使用Python的标准日志库(logging)与PyQt5一起工作,同时重定向输出到控制台。

不过,基于你的描述和提供的图片,我假设你希望在PyQt5应用程序内部有一个文本区域(如QTextEditQPlainTextEdit)来显示日志信息。以下是一个简单的例子,展示了如何在PyQt5应用程序中实现这样的日志输出功能:

import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QTextEdit, QWidget
import logging
from PyQt5.QtCore import QTextStream, QIODevice

class LogHandler(logging.Handler):
    def __init__(self, text_edit):
        logging.Handler.__init__(self)
        self.text_edit = text_edit

    def emit(self, record):
        msg = self.format(record)
        stream = QTextStream(self.text_edit)
        stream.write(msg)
        self.text_edit.ensureCursorVisible()

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.log_text_edit = QTextEdit()
        self.log_text_edit.setReadOnly(True)

        # 创建一个日志处理器并设置级别
        self.handler = LogHandler(self.log_text_edit)
        self.handler.setLevel(logging.DEBUG)

        # 创建一个日志器并添加处理器
        self.logger = logging.getLogger(__name__)
        self.logger.addHandler(self.handler)
        self.logger.setLevel(logging.DEBUG)

        layout = QVBoxLayout(self)
        layout.addWidget(self.log_text_edit)

        # 测试日志输出
        self.logger.info("This is an info message")
        self.logger.debug("This is a debug message")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())

在这个例子中,我们创建了一个自定义的日志处理器LogHandler,它继承自logging.Handler。这个处理器将日志消息写入到QTextEdit控件中。然后,我们在MainWindow类中创建了一个QTextEdit控件,并将它作为日志处理器的目标。最后,我们使用logging.getLogger()创建了一个日志器,并将我们的处理器添加到了这个日志器中。这样,每当我们使用这个日志器记录信息时,信息就会被发送到我们的QTextEdit控件中。

 类似资料:
  • 本文向大家介绍pyqt5 QlistView列表显示的实现示例,包括了pyqt5 QlistView列表显示的实现示例的使用技巧和注意事项,需要的朋友参考一下 1、简介 QlistView类用于展示数据,它的子类是QListWIdget。QListView是基于模型(Model)的,需要程序来建立模型,然后再保存数据 QListWidget是一个升级版本的QListView,它已经建立了一个数据储

  • 本文向大家介绍python3+PyQt5实现拖放功能,包括了python3+PyQt5实现拖放功能的使用技巧和注意事项,需要的朋友参考一下 本文是对《Python Qt GUI快速编程》的第10章的例子拖放用Python3+PyQt5进行改写,对图表列表,表格等进行相互拖放,基本原理雷同,均采用setAcceptDrops(True)和setDragEnabled(True)。 运行结果: 以上就

  • 问题内容: 目前,默认条目如下所示: 我该怎么做呢? 澄清我正在使用java.util.logging 问题答案: 从Java 7开始,java.util.logging.SimpleFormatter支持从系统属性获取其格式,因此在JVM命令行中添加类似内容将使其打印在一行上: 另外,您也可以将其添加到您的logger.properties:

  • 本文向大家介绍Python PyQt5实现的简易计算器功能示例,包括了Python PyQt5实现的简易计算器功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python PyQt5实现的简易计算器功能。分享给大家供大家参考,具体如下: 这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 【知识点】 1、利用循环添加按钮部件,及给每个按钮设置信号/槽

  • 问题内容: 我有一个始终返回“ PRINT”命令的SQL过程,我想提取此“ PRINT”命令的输出,即C#中的过程,我该怎么做?这是程序 问题答案: 您需要订阅活动。 MSDN在这里有一些示例代码。

  • 本文向大家介绍PyQt5中QSpinBox计数器的实现,包括了PyQt5中QSpinBox计数器的实现的使用技巧和注意事项,需要的朋友参考一下 QSpinBox 是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也可以输入值。在默认情况下,QSpinBox 的取值范围是 0~99,每次改变的步长值为 1。 QSpinBox 类和