如标题中所述,我需要以尽可能简单的方式将日志记录模块的输出重定向到Kivy标签。我在网上搜索了一个解决方案,我认为最好的方法是覆盖StreamHandler或MemoryHandler某种方式(但是我不知道如何做到这一点)。
有人可以帮助我实现这一目标吗?
我使用python 2.7
谢谢
对于这些情况,我总是自己编写logging.Handler。
这是一个工作示例:
main.py:
import kivy from kivy.app import App from kivy.clock import Clock from kivy.uix.label import Label import logging import thread import time def my_thread(log): for i in range(2**20): time.sleep(1) log.info("WOO %s", i) class MyLabelHandler(logging.Handler): def __init__(self, label, level=logging.NOTSET): logging.Handler.__init__(self, level=level) self.label = label def emit(self, record): "using the Clock module for thread safety with kivy's main loop" def f(dt=None): self.label.text = self.format(record) #"use += to append..." Clock.schedule_once(f) class MyApp(App): def build(self): label = Label(text="showing the log here") log = logging.getLogger("my.logger") log.level = logging.DEBUG log.addHandler(MyLabelHandler(label, logging.DEBUG)) thread.start_new(my_thread, (log,)) return label if __name__ == '__main__': MyApp().run()
注意这里的简单线程来测试日志记录。