2012-04-25 7 views
5

Ho una semplice app con una classe che rappresenta una struttura dati e una classe per la GUI. Io uso un registratore all'interno della prima classe:come indirizzare il logger Python alla Listbox di Tkinker?

class A(object): 
    def __init__(self): 
     self.logger = logging.getLogger(self.__class__.__name__) 
     self.logger.info('creating new A object') 

ecc

L'interfaccia grafica consiste in una finestra Tkinter con una casella di riepilogo.

Come posso indirizzare i registri alla casella di riepilogo? Mi piacerebbe vedere i messaggi compilare la lista invece di essere registrati invece di mostrarli nella console o nel file di registro.

Come aggiornare la casella di riepilogo mentre viene eseguito un metodo all'interno della classe?

risposta

5

in questo caso è probabilmente migliore per attuare il proprio logging.Handler:

from logging import Handler, getLogger 

class ListboxHandler(Handler): 
    def __init__(self, box): 
     self._box = box 
     Handler.__init__(self) 

    def emit(self, record): 
     r = self.format(record) 
     self._box.insert(0, r) 

# quick test: 
target = [] # supports insert like Listbox :) 
rootLogger = getLogger() 
# add handler to the root logger here 
# should be done in the config... 
rootLogger.addHandler(ListboxHandler(target)) 
rootLogger.warn('test') 
print(target) 

questo modo si ha il pieno controllo sulla formattazione, livelli di registro dal nostro config.

Problemi correlati