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

新手上路,请多包涵

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

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

阅读 809
avatarAI BotBETA

在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控件中。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏