gpt4 book ai didi

python - 如何使用自定义日志记录处理程序将记录器重定向到 wxPython textCtrl?

转载 作者:太空狗 更新时间:2023-10-29 17:57:36 25 4
gpt4 key购买 nike

我在我的 python 应用程序中使用了一个模块,该模块使用日志记录模块写入大量消息。最初我在控制台应用程序中使用它,使用控制台处理程序很容易让日志输出显示在控制台上。现在我已经使用 wxPython 开发了我的应用程序的 GUI 版本,我想将所有日志记录输出显示到自定义控件 — 多行 textCtrl。有没有一种方法可以创建一个自定义日志记录处理程序,这样我就可以在那里重定向所有日志记录输出,并在任何地方/以任何我想要的方式显示日志消息——在本例中,是一个 wxPython 应用程序。

最佳答案

创建处理程序

import wx
import wx.lib.newevent

import logging

# create event type
wxLogEvent, EVT_WX_LOG_EVENT = wx.lib.newevent.NewEvent()


class wxLogHandler(logging.Handler):
"""
A handler class which sends log strings to a wx object
"""
def __init__(self, wxDest=None):
"""
Initialize the handler
@param wxDest: the destination object to post the event to
@type wxDest: wx.Window
"""
logging.Handler.__init__(self)
self.wxDest = wxDest
self.level = logging.DEBUG

def flush(self):
"""
does nothing for this handler
"""


def emit(self, record):
"""
Emit a record.

"""
try:
msg = self.format(record)
evt = wxLogEvent(message=msg,levelname=record.levelname)
wx.PostEvent(self.wxDest,evt)
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)

然后在你的控制下

self.Bind(EVT_WX_LOG_EVENT, self.onLogEvent)

def onLogEvent(self,event):
'''
Add event.message to text window
'''
msg = event.message.strip("\r")+"\n"
self.logwindow.AppendText(msg) # or whatevery
event.Skip()

关于python - 如何使用自定义日志记录处理程序将记录器重定向到 wxPython textCtrl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com