如何将Python的日志输出重定向到Kivy标签? [英] How to redirect Python's logging output to Kivy label?

查看:275
本文介绍了如何将Python的日志输出重定向到Kivy标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如标题所述,我需要以简单的方式将记录模块输出重定向到Kivy标签。我在网络上搜索了一个解决方案,我认为最好的方法是以某种方式覆盖 StreamHandler MemoryHandler (但我不知道该怎么做点]

有人可以帮助我实现这一点?



我使用python 2.7



谢谢

解决方案

我总是使自己的日志记录。 / p>

这是一个工作示例:



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 **
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):
使用Kivy主循环线程安全的Clock模块
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 =显示日志在这里)

log = logging .getLogger(my.logger)
log.level = logging.DEBUG
log.addHandler(MyLabelHandler(label,logging.DEBUG))

thread.start_new(my_thread ,(log,))

返回标签


如果__name__ =='__main__':
MyApp()。run()

注意这里的简单线程来测试日志记录。


As written in the title , i need to redirect the logging module output to a Kivy label in the simple way possible. I searched for a solution on the web an i think the best methods are to overwrite the StreamHandler or the MemoryHandler in some way (but i don't know how to do this point).

Someone can help me to achieve this?

I use python 2.7

thanks

解决方案

I always make my own logging.Handler for cases like these.

Here is a working example:

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()

Notice the simple thread here to test the logging.

这篇关于如何将Python的日志输出重定向到Kivy标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆