2012-04-25 17 views
5

मेरे पास डेटा संरचना का प्रतिनिधित्व करने वाली कक्षा और जीयूआई के लिए एक कक्षा के साथ एक साधारण ऐप है। मैं प्रथम श्रेणी के अंदर एक लकड़हारा का उपयोग करें:पायथन लॉगर को टिंकर के लिस्टबॉक्स में कैसे निर्देशित करें?

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

आदि

जीयूआई एक लिस्टबॉक्स के साथ एक Tkinter विंडो में होते हैं।

मैं लॉगबॉक्स को लॉग कैसे भेज सकता हूं? मैं यह देखना चाहता हूं कि संदेश कंसोल या लॉग फ़ाइल में दिखने के बजाए लॉग इन होने के बजाय सूची को पॉप्युलेट करते हैं।

कक्षा के भीतर विधि को निष्पादित करते समय मैं सूची बॉक्स को कैसे अपडेट कर सकता हूं?

उत्तर

5
इस मामले में

यह शायद अपने स्वयं के logging.Handler लागू करने के लिए सबसे अच्छा है: आप स्वरूपण, लॉग स्तरों आदि अपने config से पर पूरा नियंत्रण है

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) 

इस तरह से।

संबंधित मुद्दे