2012-04-25 24 views
5

Tengo una aplicación simple con una clase que representa una estructura de datos y una clase para GUI. Yo uso un registrador dentro de la primera clase:cómo dirigir el registrador de Python al Listbox de Tkinker?

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

etc.

La interfaz gráfica de usuario consiste en una ventana Tkinter con un cuadro de lista.

¿Cómo puedo dirigir los registros al cuadro de lista? Me gustaría ver que los mensajes completen la lista en su lugar a medida que se registran en lugar de aparecer en la consola o el archivo de registro.

¿Cómo puedo actualizar el listbox mientras se ejecuta un método dentro de la clase?

Respuesta

5

en este caso, es probable que sea la mejor manera de poner en práctica su propia 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) 

de esta manera usted tiene el control completo sobre el formato, etc niveles de registro de su configuración.

Cuestiones relacionadas