29

PythonでTkinterテキストウィジェットへのロギングを設定する方法の例はありますか?これがいくつかのアプリで使用されているのを見たことがありますが、ログをログファイル以外に転送する方法がわかりません。

4

6 に答える 6

10

をサブクラス化する必要がありますlogging.Handler

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')
于 2012-11-10T07:35:38.667 に答える
2

フォードの答えをさらに発展させて、ログを追跡するスクロール テキスト ウィジェットを次に示します。メンバーは、logging_handlerロガーに追加するものです。

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)
于 2016-02-12T14:55:35.970 に答える