Python Logging to Tkinter Text Widget

后端 未结 6 1849
悲哀的现实
悲哀的现实 2020-12-14 16:46

Does any one out there have an example of how to setup logging in Python to a Tkinter Text Widget? I have seen this used in several apps but cannot figure out how to direct

6条回答
  •  执笔经年
    2020-12-14 17:32

    Building further on ford's answer, here's a scrolling Text widget that tails the log. The logging_handler member is what you add to your logger.

    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)
    

提交回复
热议问题