首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Python日志记录到Tkinter Text小部件

将Python日志记录到Tkinter Text小部件
EN

Stack Overflow用户
提问于 2012-11-10 10:46:13
回答 4查看 22.8K关注 0票数 29

有没有人可以举例说明如何将Python中的日志设置为Tkinter Text Widget?我已经在几个应用程序中看到过这一点,但我不知道如何将日志记录定向到日志文件以外的任何地方。

EN

回答 4

Stack Overflow用户

发布于 2012-11-10 15:35:39

你应该继承logging.Handler的子类,例如:

代码语言:javascript
复制
import logging
from Tkinter import INSERT

class WidgetLogger(logging.Handler):
    def __init__(self, widget):
        logging.Handler.__init__(self)
        self.widget = widget

    def emit(self, record):
        # Append message (record) to the widget
        self.widget.insert(INSERT, record + '\n')
票数 10
EN

Stack Overflow用户

发布于 2013-12-19 07:58:19

我建立在Yuri的想法之上,但需要做一些修改才能让事情正常工作:

代码语言:javascript
复制
import logging
import Tkinter as tk

class WidgetLogger(logging.Handler):
    def __init__(self, widget):
        logging.Handler.__init__(self)
        self.setLevel(logging.INFO)
        self.widget = widget
        self.widget.config(state='disabled')

    def emit(self, record):
        self.widget.config(state='normal')
        # Append message (record) to the widget
        self.widget.insert(tk.END, self.format(record) + '\n')
        self.widget.see(tk.END)  # Scroll to the bottom
        self.widget.config(state='disabled')

请注意,将状态从“normal”来回切换到“disabled”对于使Text小部件成为只读状态是必要的。

票数 10
EN

Stack Overflow用户

发布于 2016-02-12 22:55:36

在福特答案的基础上,这里有一个滚动文本窗口小部件,它尾随日志。logging_handler成员是您添加到记录器中的成员。

代码语言:javascript
复制
import logging
from Tkinter import END, N, S, E, W, Scrollbar, Text
import ttk

class LoggingHandlerFrame(ttk.Frame):

    class Handler(logging.Handler):
        def __init__(self, widget):
            logging.Handler.__init__(self)
            self.setFormatter(logging.Formatter("%(asctime)s: %(message)s"))
            self.widget = widget
            self.widget.config(state='disabled')

        def emit(self, record):
            self.widget.config(state='normal')
            self.widget.insert(END, self.format(record) + "\n")
            self.widget.see(END)
            self.widget.config(state='disabled')

    def __init__(self, *args, **kwargs):
        ttk.Frame.__init__(self, *args, **kwargs)

        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=0)
        self.rowconfigure(0, weight=1)

        self.scrollbar = Scrollbar(self)
        self.scrollbar.grid(row=0, column=1, sticky=(N,S,E))

        self.text = Text(self, yscrollcommand=self.scrollbar.set)
        self.text.grid(row=0, column=0, sticky=(N,S,E,W))

        self.scrollbar.config(command=self.text.yview)

        self.logging_handler = LoggingHandlerFrame.Handler(self.text)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13318742

复制
相关文章

相似问题

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