2012-04-25 18 views
5

Mam prostą aplikację z klasą reprezentującą strukturę danych i klasę dla GUI. Używam rejestratora wewnątrz pierwszej klasy:jak skierować python logger na Listbox Tkinkera?

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

itp

GUI składa się z jednego okna Tkinter z ListBox.

Jak mogę skierować dzienniki do listy? Chciałbym, aby komunikaty wypełniały listę zamiast rejestrować się zamiast pojawiać się w konsoli lub pliku dziennika.

Jak mogę zaktualizować listbox, gdy wykonywana jest metoda w klasie?

Odpowiedz

5

w tym przypadku to chyba najlepiej zaimplementować własną 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) 

ten sposób masz pełną kontrolę nad formatowaniem, poziomu dziennika itd od twojej konfiguracji.

Powiązane problemy