【问题标题】:Python logging to QTextEditPython 记录到 QTextEdit
【发布时间】:2016-12-13 15:33:29
【问题描述】:

我想升级我的日志部分以适应日志记录模块。

我的应用程序已经相当先进,并且使用 PySide 作为 GUI。我想设置处理程序来生成不同的日志文件,但也想写入一个QTextEdit 类似控制台的小部件......

现在,writeLog 函数写入主日志文件(包含执行期间生成的所有日志)和QTextEdit,此外,我为我的应用程序的某些特定部分写入单独的文件。


我怎样才能做到这一点? (越简单越好)。我需要继承 Handler 类吗? (目前在 Python 中将远远高于我的水平,但如果指导得当,我为什么不猜)或者我只是错过了文档中的某些内容?

【问题讨论】:

  • 嗯,有一个潜在的陷阱。如果您的高级 PySide GUI 崩溃,那么记录器将无法显示其日志输出,对吗?登录文件或控制台不是更好吗?否则,我认为子类化处理程序并将 Qt 信号与更新 QTextEdit 的插槽连接起来非常简单。去做就对了。究竟是什么阻碍了你?
  • 感谢您的回答!确实,如果应用程序在某事中间崩溃,此时日志将失败(使用手动“使用 open() as...”创建文件但也使用日志记录)...也许我确实可以将日志添加到控制台.无论如何,我在 GUI 中嵌入了一个控制台,我希望能够登录到它。所以感谢您确认子类化的想法。没有什么能阻止我,除了我是 Python 的初学者 ^^ 另外,这个应用程序确实在很短的时间内用作开发团队的工具,所以我会保留这个想法,但可能不会花时间做这个额外的尚未开发...

标签: python python-2.7 logging pyside


【解决方案1】:

您可以使用自定义记录器代替 writeLog 函数。这很容易。示例:

class GuiLogger(logging.Handler):
    def emit(self, record):
        self.edit.append_line(self.format(record))  # implementation of append_line omitted

h = GuiLogger()
h.edit = yourTextEditWidget  # this should be done in __init__
logging.getLogger().addHandler(h)

现在logging.info("nice") 会将日志保存到 GUI 小部件。

【讨论】:

    【解决方案2】:

    要使用 QTextEdit,这必须改变

    class GuiLogger(logging.Handler):
        def emit(self, record):
            self.edit.append_line(self.format(record))
    

    class GuiLogger(logging.Handler):
        def emit(self, record):
            self.edit.textCursor().insertText(self.format(record))
    

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多