Python日志命令不能实时工作

2024-09-29 19:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Tkinter(ScrolledText)中有一个日志小部件,它有一个TextHandler类,在小部件中处理日志和打印主题

class TextHandler(logging.Handler):

    def __init__(self, text):
        # run the regular Handler __init__
        logging.Handler.__init__(self)
        # Store a reference to the Text it will log to
        self.text = text

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

        def append():
            self.text.configure(state='normal')
            self.text.insert(Tkinter.END, msg + '\n')
            self.text.configure(state='disabled')
            # Autoscroll to the bottom
            self.text.yview(Tkinter.END)

        self.text.after(0, append)


st = ScrolledText.ScrolledText(self, width=190, height=9, state='disabled')
st.configure(font='TkFixedFont')
st.place(x=0, y=539)

text_handler = TextHandler(st)

# Logging configuration
logging.basicConfig(filename='test.log',
                            level=logging.INFO,
                            format='%(asctime)s - %(levelname)s - %(message)s')

# Add the handler to logger
self.logger = logging.getLogger()

self.logger.addHandler(text_handler)

并调用logging.info(msg)获取日志消息。但是有一个问题。一切都很好,但是当这个函数在一个进程之前被调用时(例如一些处理列表的函数),我的日志就会在那之后出现!!在

^{pr2}$

print方法在这里工作得很好,但是logging存在问题。循环结束后,我收到了日志消息
所以。。。有什么问题吗?在


Tags: thetotextselfinittkinterconfigurelogging
1条回答
网友
1楼 · 发布于 2024-09-29 19:30:23

不应使用after(0, ...)。我不确定这是否是唯一的问题,但肯定是一个问题。您正在缺少事件处理程序“空闲”队列永远不会为空,因此它没有机会为正常事件提供服务。实际上,您已经创建了一个无限循环。在

你应该给一个小的非零间隔,这将有助于解决这个问题。在

相关问题 更多 >

    热门问题