2012-04-25 9 views
5

Tôi có một ứng dụng đơn giản với một lớp biểu diễn cấu trúc dữ liệu và một lớp cho GUI. Tôi sử dụng một logger bên trong lớp đầu tiên:làm thế nào để trực tiếp logger python vào Listbox của Tkinker?

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

, vv

GUI bao gồm trong một cửa sổ Tkinter với một Listbox.

Tôi làm cách nào để hướng các bản ghi vào hộp danh sách? Tôi muốn xem các tin nhắn cư danh sách thay vì họ nhận được đăng nhập thay vì hiển thị trong giao diện điều khiển hoặc tập tin đăng nhập.

Làm cách nào để cập nhật hộp danh sách trong khi phương thức trong lớp được thực thi?

Trả lời

5

trong trường hợp này nó có thể là tốt nhất để thực hiện logging.Handler riêng bạn:

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) 

cách này bạn có toàn quyền kiểm soát định dạng, mức log vv từ cấu hình của bạn.