tklog:基于tkinter的日志控件

2019年9月24日 / 1,246次阅读 / Last Modified 2020年10月16日
tkinter开源项目

日志(log)就像一杯拿铁,随时都需要!

用Python的tkinter编写GUI程序,再使用print来打印log,已经不方便了。GUI程序正常运行时,console窗口也是要关闭的。但是确实又需要各种log的记录和显示,我们一般的解决方案是使用tk.Text控件,或者高级一点,使用scrolledtext控件。我最近编写一个GUI工具就遇到了这个需求,为了在所有的地方,都能直接方便的logging,我用Python制作了tklog这个开源小控件。

项目地址:https://github.com/xinlin-z/tklog

请手下留Star....^___^

tklog.py中包含4个类:tklog,winlog,tklogHandler和winlogHandler。

tklog继承自scrolledtext控件(来自Python标准库),在此基础上增加了几个实用的功能,比如上下键,鼠标右键菜单,可选择导出全部到文本到文件或copy所选内容到剪贴板,以及清空这个log区域。tklog类是所有其它类的继承,但不是继承关系,而是包含关系。

winlog是包含一个tklog对象的类,它建立在一个Modaless Toplevel窗体上,并在此基础上增加了一些不同的细节,比如在没有交点的时候窗口半透明,以及设置topmost属性。winlog是弹出式的log窗口,即可用于GUI程序,也可以在命令行程序中使用,因为winlog可两个参数可以用来withdraw(不显示root窗口)和destroy(自动销毁) root窗口。

tklogHandler继承自logging.Handler,包含一个tklog,日志都会在tklog窗口中显示。

winlogHandler继承自logging.handler,包含一个winlog,资质都会在winlog窗口中显示。

参考:自定义logging.Handler

log窗口在代码层面尽最大可能保持readonly(只读),以便规避因为不小心的操作而影响的log内容的一致性。不过,您也可以通过右键菜单选择是否可编辑!

tklog还支持图片日志!

请查看并运行测试代码:

$ python3 example_tklog.py
$ python3 example_tklogHandler.py
$ python3 example_winlog.py
$ python3 example_winlogHandler.py

Ubuntu桌面下的截图:

tklog的运行效果
tklog的运行效果

对我来说,tklog是个很handy的工具,希望您也能喜欢。

关于sync参数(V0.12版本增加)

sync参数的作用的,确保日志显示出来之后,代码再往下走!因为有的时候,log很多,在Text窗口上显示滞后。避免代码走跑完了,日志还在不停打印!

请一定不要在GUI Event Loop事件代码中将此参数设置为True,会死锁!!

sync=True可以用在后台线程中,给他们提供一个同步日志输出和代码执行位置的机制。

版本说明

2020年10月16日:V0.12

  • 各级log接口增加(危险的)sync参数;

2020年8月29日:V0.11

  • 右键菜单支持选择是否自动滚动(Autoscrolling),是否可编辑(Editable);
  • warning的颜色调整为hotpink;
  • queue.put设置为block=False,尽可能避免GUI程序特有的deadlock场景;

2020年7月7日:V0.10

  • 重新整理了代码和文档,重新从V0.10开始走版本,此版本提供tklog,tklogHandler,winlog和winlogHandler这4个class。

-- EOF --

本文链接:https://www.pynote.net/archives/1207

留言区

《tklog:基于tkinter的日志控件》有3条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    tklog是异步打印输出!如何实现同步? [回复]

  • 麦新杰

    没想到这个tklog项目,几乎成了我在公司另一个项目的核心! [回复]

  • 麦新杰

    今天同事请了一杯无糖拿铁,可惜他不是程序员... [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top