2012-04-25 26 views
5

Veri yapısı ve GUI için bir sınıf temsil eden bir sınıf ile basit bir uygulama var. Birinci sınıfta içinde bir kayıt kullanımı:Python kaydediciyi Tkinker'ın Liste Kutusuna nasıl yönlendirilir?

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

vb

GUI bir liste kutusu bir kez Tkinter penceresinde oluşur.

Günlükleri liste kutusuna nasıl yönlendirebilirim? İletileri, konsolda veya günlük dosyasında göstermek yerine giriş yaptıkları için listeyi doldurduğunu görmek isterim.

Sınıf içinde bir yöntem yürütüldüğünde liste kutusunu nasıl güncelleyebilirim? Bu durumda

cevap

5

Kendi logging.Handler uygulamaya en iyisi:

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) 

bu şekilde size yapılandırmasındaki biçimlendirme, günlük seviyeleri vb üzerinde tam kontrole sahip.