首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5 +日志库

PyQt5 +日志库
EN

Stack Overflow用户
提问于 2020-11-13 07:33:21
回答 1查看 106关注 0票数 0

我想将所有日志记录重定向到QPlainTextEdit。我已经能够通过遵循this线程实现这一点。但是,我在理解实际代码时遇到了一些问题:

代码语言:javascript
复制
import logging
import sys

from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5 import QtWidgets


class Handler(QObject, logging.Handler):
    new_record = pyqtSignal(object)

    def __init__(self):
        super().__init__()
        super(logging.Handler).__init__()

    def emit(self, record):
        msg = self.format(record)
        self.new_record.emit(msg)


class Formatter(logging.Formatter):
    def formatException(self, ei):
        result = super(Formatter, self).formatException(ei)
        return result

    def format(self, record):
        s = super(Formatter, self).format(record)
        if record.exc_text:
            s = s.replace('\n', '')
        return s


class MyTextBox(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        container = QtWidgets.QGroupBox()
        layout = QtWidgets.QVBoxLayout()

        self.text_box = QtWidgets.QPlainTextEdit()
        self.text_box.setReadOnly(True)
        layout.addWidget(self.text_box)

        self.btn = QtWidgets.QPushButton("Click me")
        layout.addWidget(self.btn)

        container.setLayout(layout)

        self.setCentralWidget(container)

        handler = Handler()
        logging.getLogger().addHandler(handler)
        logging.getLogger().setLevel(logging.INFO)
        handler.new_record.connect(self.text_box.appendPlainText)

        self.btn.clicked.connect(self.heClickedMe)

    def heClickedMe(self):
        logging.debug('damn, a bug')
        logging.info('something to remember')
        logging.warning('that\'s not right')
        logging.error('foobar')


app = QtWidgets.QApplication(sys.argv)
dlg = MyTextBox()
dlg.show()
sys.exit(app.exec_())

所以我很难理解Handler类中的"emit“方法。例如,"emit“方法是logging.Handler还是QObject?什么时候调用"emit“?

EN

回答 1

Stack Overflow用户

发布于 2020-11-13 07:46:27

  1. is“发出”logging.Handler或QObject?:的方法以了解使用文档时必须使用的类的方法,并且清楚地表明emit是have的一个方法

使用debug、info、warning和error方法时会在内部调用

  1. When "emit“吗?示例:此方法在内部调用。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64813383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档